JavaのintとInteger変数のメモリ割り当てに疑問があります。メモリを測定するためにInstrumentation.getObjectSize()を使用し、両方の変数に同じサイズを生成します。メモリ内のintの大きさと整数をjavaで合わせる
ObjectSizeFetcher.java
import java.lang.instrument.Instrumentation;
public class ObjectSizeFetcher {
private static Instrumentation instrumentation;
public static void premain(String args, Instrumentation inst) {
instrumentation = inst;
}
public static long getObjectSize(Object o) {
return instrumentation.getObjectSize(o);
}
}
Test.java
public class Test {
public static void main(String[] args) throws Exception {
int i=0;
Integer i1 = new Integer(0);
long value = ObjectSizeFetcher.getObjectSize(i);
System.out.println(value);//prints 16
long value1 = ObjectSizeFetcher.getObjectSize(i1);
System.out.println(value1);//prints 16
}
}
上記の場合には、両方の可変サイズのプリント同じ:以下の私のコードを見つけてください。私の疑問は、intはプリミティブ型でサイズは4バイトです。Integerは参照型で、そのサイズは16バイトですが、この場合、なぜ両方の値が16バイトになるのでしょうか?どちらもヒープ内の同じ量のメモリを使用すると、Javaのメモリに問題が発生しますか?
Wierd。私は今、upvotesの負荷を期待していただろう。ここに私からのものがある。 – Bathsheba
Javaで変数/オブジェクトのサイズを取得する方法はありますか? –
getObjectSizeのオーバーロードを構築し、値をハードコードすることができます。 – Bathsheba