コード次のオブジェクト配列の計算メモリサイズは、私の知る限り、から構成され、予想通りを「24バイトを使用する」を与える場合:のJavaオブジェクトのアレイサイズ
4bytes(element pointer)+16bytes(object header)+4bytes(element space) = 24bytes
// with JVM argument -XX:-UseTLAB
public static void main(String[] args) {
long size = memoryUsed();
Object[] o = new Object[]{1};
//Object[] o = new Object[]{1L};
size = memoryUsed() - size;
System.out.printf("used %,d bytes%n", size);
//Output: used 24 bytes
}
public static long memoryUsed() {
return Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory();
}
要素タイプがLong(1L)に変更された場合、結果は混乱します。ほとんどの場合、「9,264バイト使用」、誰でも私を啓発するのに役立つでしょうか?この2つの要素型の間のメモリ割り当ての違いは何ですか? JOLと呼ばれるそのための専用ツールがあるよう
// with JVM argument -XX:-UseTLAB
public static void main(String[] args) {
long size = memoryUsed();
//Object[] o = new Object[]{1};
Object[] o = new Object[]{1L};
size = memoryUsed() - size;
System.out.printf("used %,d bytes%n", size);
//Output: used 9,264 bytes
}
恐らく、JVMは、あなたが期待するよりも多くのメモリを消費する追加のクラス( 'Long'や内部クラス' Long.LongCache'など)をロードする必要があります。 –
[Javaでは、オブジェクトのサイズを判断する最善の方法は何ですか?](https://stackoverflow.com/questions/52353/in-java-what-is-the-best-way-to -determine-the-object-of-object) –