JAVA对象的布局

249 阅读1分钟
分享一点心得
JAVA对象的布局
JAVA对象一般分为三部分(对象头、对象属性方法、填充数据)

我创建一个TestDemo类,只有一个私有变量。

接下来我打印一下这个类创建对象的对象布局。这里我们用ClassLayOut中的方法,具体依赖如下
    <dependency>
        <groupId>org.openjdk.jol</groupId>
        <artifactId>jol-core</artifactId>
        <version>0.9</version>
    </dependency>

图中的1为对象头(object header),图中的2为对象的变量。 补充一点:我用的是64位jdk,所以应该以8byte 位最小分配单元 图中正好为 16byte 是8的倍数。 我在举一个例子:(不用int类型的变量)

1:对象头(12byte) 2:变量(1byte) 3:填充数据(3byte)用来达到8的倍数

PS:

1、在Java并发编程中,synchronized如果以TestDemo作为锁来实现线程安全的话,锁是加载对象头上的。

2、

Lock的锁中是有标注位专门来标记锁的。