java.lang.Integer对象布局及其开销

时间:2018-04-08 05:56:03

标签: java jvm integer object-layout jol

我使用了一个名为JOL (Java Object Layout)的工具,它试图分析对象布局。它附带一个 android { defaultConfig { multiDexEnabled true } } ,我用它来分析cli。我看到Integer对象占用了12个额外的字节用于开销。该开销可以是4个字节用于该对象所属的类的地址,另外4个用于垃圾收集,但剩下的4个字节呢?我知道对象有一个整数hashCode值,但我不认为它是唯一的(即它不使用内存的位置,而是使用原始值),因为:

java.lang.Integer

日志:

Integer a = new Integer(12);
Integer b = new Integer(12);

System.out.println(a.hashCode() == 12 && b.hashCode() == 12);
// prints: true

1 个答案:

答案 0 :(得分:6)

  

......但剩下的4个字节呢?

缺少4个字节将填充到下一个8字节边界。 Java堆节点的大小为8字节的倍数。

但由于这是一个64位的JVM,标记字是8个字节而不是4个字节,总共产生12个字节的标头开销。