Java のメモリ割り当て手法と少し混乱しています。Javaが次のコードにメモリを割り当てる方法を教えてください。
Integer a;
a = new Integer(1);
Integer a
jvm が 64 ビット参照を作成し、そのためa = new Integer(1)
に値 1 を格納するためにより多くのメモリを割り当てることを求めています。これは正しいですか?
Java のメモリ割り当て手法と少し混乱しています。Javaが次のコードにメモリを割り当てる方法を教えてください。
Integer a;
a = new Integer(1);
Integer a
jvm が 64 ビット参照を作成し、そのためa = new Integer(1)
に値 1 を格納するためにより多くのメモリを割り当てることを求めています。これは正しいですか?
Integer a;
スタックにメモリを割り当てて参照値を保持し、初期化しますnull
new
インスタンスをヒープメモリに作成する
ほとんどのJVM(64ビットのものも含む)は32ビット参照を使用します。(新しいJVMは、最大ほぼ32 GBのヒープに32ビット参照を使用します)参照はスタックまたはCPUレジスタにあり、通常はカウントされません。整数はヒープに割り当てられます。
Integer i = new Integer(1); // creates a new object every time.
Integer j = 1; // use a cached value.
自動ボクシングの使用は短いだけでなく、キャッシュを使用できるため、より効率的になります。
もちろん、最も効率的なのは
int k = 1; // not object created and no heap used.
自動ボックス化された値の場合、プリミティブと比較してパフォーマンスの違いは非常に小さく、参照はint
値と同じサイズになる可能性があります。ただし、値が大きい場合は、パフォーマンスに大きな違いが生じる可能性があります。