2

Javaで次のようなバブルソートの例を実行するとします。

package testing;

public class bubbleSort {
public static void main(String a[]) {
    int i;
    int array[] = { 12, 9, 4, 99, 120, 1, 3, 10 };
    System.out.println("Values Before the sort:\n");
    for (i = 0; i < array.length; i++)
        System.out.print(array[i] + "  ");
    System.out.println();
    bubble_srt(array, array.length);
    System.out.print("Values after the sort:\n");
    for (i = 0; i < array.length; i++)
        System.out.print(array[i] + "  ");
    System.out.println();
    System.out.println("PAUSE");
}

public static void bubble_srt(int a[], int n) {
    int i, j, t = 0;
    for (i = 0; i < n; i++) {
        for (j = 1; j < (n - i); j++) {
            if (a[j - 1] > a[j]) {
                t = a[j - 1];
                a[j - 1] = a[j];
                a[j] = t;
            }
        }
    }
}
}

調べる方法はありますか

(a)要素の配列のデータ構造が消費するRAMの量はどれくらいですか?

(b)そうでない場合-バニラのHelloWorldと比較してプロセスが消費するRAMの量を比較する方法はありますか?

package testing;

public class Testing {
public static void main(String[] args) {
    System.out.println("Hello World!");
}

}
4

4 に答える 4

1

要素の配列のデータ構造が消費するRAMの量はどれくらいですか?

簡単ではありません。長さは約40〜48バイトになりますが、心配する必要はありません。

そうでない場合-バニラHelloWorldと比較してプロセスが消費するRAMの量を比較する方法はありますか?

推測では、最初の例では2番目の例よりも最大100KB多く使用されていると思います。これは、余分なクラスをロードし、メモリ消費の大部分を占めるint値に変換するという意味の背後で、多くのことが行われているためです。String比較すると、配列は簡単です。

いずれにせよ、100KBも心配する価値はありません。デスクトップでは、100 KBのコストは1セント未満であり、再利用できます。

于 2012-08-29T11:24:39.207 に答える
1

getRunTime()現在のプログラムの実行時間を見つけるために使用できます。また、totalmemoryプロパティは、使用されているメモリを見つけるのに役立ちます。

   // Get the Java runtime
    Runtime runtime = Runtime.getRuntime();
    // Run the garbage collector
    runtime.gc();
    // Calculate the used memory
    long memory = runtime.totalMemory() - runtime.freeMemory();
于 2012-08-29T11:26:21.740 に答える
0

実際のメモリ使用量を取得するには、アプリケーションのプロファイルを作成する必要があります。YourKitをお試しください。sortを呼び出す直前にアプリケーションに一時停止を追加します。ソートを実行する前と終了した後にメモリスナップショットを作成し、それらを比較します。

すべてのGCを呼び出しても、「実際の」結果は得られません。VM自体によって割り当てられたオブジェクトはたくさんあります。おそらくきれいになり、間違った画像が表示されます。

于 2012-08-29T11:31:52.110 に答える
0

この式を使用してください。

     static long memoryUsed() {
        return runtime.totalMemory() - runtime.freeMemory();
     }

     static final Runtime runtime = Runtime.getRuntime();
于 2012-08-29T11:35:30.430 に答える