0

こんにちは、私はJavaプログラミングに比較的慣れていません。私が書いた次のプログラムは大量のメモリを消費しているようです (約 240 MB ですが、普通ですか? - 私はそうは思いません!) メモリ ストレージを削減するために、このプログラムを最適化する方法をいくつか提案してください。

プログラム-

 You have 2 sorted array suppose arr1[4] and arr2[3]
          now we have to combinely sort them using very little extra space(i.e. in-place sort)
          ex..arr1[4]={5,8,11,14,16}
          arr[2]={1,7,10}
          then result should be--in arr1[4]={1,5,7,8,10}
          in arr2[3]={11,14,16}

コード-

import java.util.*;

class sort_in_place
{
    public static void main(String args[])
    {
        // input 2 sorted arrays
        int []a = {5,8,11,14,16};
        int []b = {1,7,10};

        System.out.println("initial array: a = "+Arrays.toString(a)+"   b = "+Arrays.toString(b)+"\n");

        // use extra space to store the array 'a' elements.
        int key = 0, i=0; 

        for( i=0; i<a.length ; i++)
        {
             key = a[i];         // store value in temporary variable key.

            // if key is greater than 1st element of array 'b' then exchange their values and sort array 'b'
            if(key > b[0])
            {
                int j = 1;
                a[i] = b[0];
                while(j<b.length && key > b[j])
                {
                    b[j-1] = b[j];
                    j++;
                }
                b[j-1] = key;
            }
        }
        System.out.println("final array: a = "+Arrays.toString(a)+"   b = "+Arrays.toString(b)+"\n");
    }
}
4

4 に答える 4

4

単純な Helloworld プログラムを実行するだけでも、Java には 300 以上のクラスをロードする必要があります。ここで言いたいのは、Java の初期化にはメモリが必要だということです。Java には、メモリ使用量を定義するための Xmx および Xms オプションがあります。詳細については、Java ドキュメントを参照してください。

于 2012-09-09T18:02:14.777 に答える
3

jvm プロセスの場合、24 MB は正常です。

于 2012-09-09T18:52:38.167 に答える
2

Java プログラムは単独では実行できず、メモリ、バイトコードの実行、およびその他のタスクを処理するには Java 仮想マシン プラットフォームが必要であることを覚えておく必要があります。Oracle JVM は実行を高速化するためにかなりの量のメモリを使用するため、ごくわずかなプログラムでも起動時に大きなペナルティが発生します。

これが、小さなユーティリティが Java で書かれることがほとんどない理由です。

メモリの使用量が多すぎるかどうかを判断するには、JVMを測定する必要があります。そのためにプロファイラーを使用します。JDK の JVisualVM は、無料で開始できる優れたプロファイラーです。

于 2012-09-09T18:57:08.430 に答える
1

あなたのプログラムは、240 MB ideone が報告するよりもはるかに少ないメモリを使用します。ノートブックで実行し、最後に挿入System.in.read();して終了main()を遅らせ、Windows タスク マネージャーで対応するプロセスを調べました。報告されたピーク時のメモリ使用量は9 MBでした...

そのほとんどは JVM のインフラストラクチャ (ジャスト イン タイム コンパイラなど) であり、プログラムとはまったく関係ありません。

于 2012-09-09T19:09:47.217 に答える