4

次のコードで可変出力が得られる理由:

Runtime rt = Runtime.getRuntime();
long x,y;
x = rt.freeMemory();
char z[] = new char[Index];
y = rt.freeMemory();

System.out.println("Difference = " + (x-y))

出力は、インデックスの値が小さい場合 (<10000) はゼロですが、値 >=100000 の場合、値は 200016 です。ゼロを追加するたびに、2000016 になります。

それはどのように可能ですか。[編集]私の目的は、メモリ内のデータオブジェクトのサイズを見つけることです(コードで使用されています-ここではインデックスサイズのChar z []を使用しています)。

4

2 に答える 2

2

n バイトの空きメモリがあり、m バイトを割り当てると、後で nm バイトの空きメモリができると仮定しているようです。

これは合理的な仮説ですが、非同期ガベージ コレクタが存在する場合、適切と思われるメモリ コンパクションを行う、または行わない場合は誤りです。

また、特定の JVM の動作を何年もかけて研究し、freeMemory() の結果に対する割り当ての影響を予測できる深い知恵と知識を蓄積したとしても、別の JVM または別の JVM に切り替えると、この知識は突然役に立たなくなる可能性があります。現在のもののみを更新します。

したがって、年長者を信頼しRuntime.freeMemory()て、一種の面白い乱数ジェネレーターとして見てください。

于 2012-05-08T18:54:35.503 に答える
0

私は書いてSystem.gc() 、あなたは違いを見ることができます。

    Runtime rt = Runtime.getRuntime();
    long x,y;
    System.gc();
    x = rt.freeMemory();
    char z[] = new char[1000];
    y = rt.freeMemory();

    System.out.println("X = " + (x));
    System.out.println("Y = " + (y));
    System.out.println("Difference = " + (x-y));

出力

X = 16179672
Y = 16085904
Difference = 93768
于 2012-05-08T18:01:56.860 に答える