java对象的内存布局

Hotspot虚拟机

对象头(Header)

对象标记

mark-word:对象标记字段占4个字节,用于存储一些列的标记位,比如:哈希值、轻量级锁的标 记位,偏向锁标记位、分代年龄等。 Klass Pointer:Class对象的类型指针,Jdk1.8默认开启指针压缩后为4字节,关闭指针压缩( - XX:-UseCompressedOops )后,长度为8字节。其指向的位置是对象对应的Class对象(其对应的 元数据对象)的内存地址。

hashcode
分代年龄
同步锁标记
偏向锁标记
偏向锁持有线程ID
monitor()

ObjectMoniyor,争抢锁的实现逻辑

类元数据

实例数据(Instance Data)

包括对象的所有成员变量,大小由各个成员变量决定,比如:byte占1个字节8比 特位、int占4个字节32比特位。

对齐填充(Padding)

最后这段空间补全并非必须,仅仅为了起到占位符的作用。由于HotSpot虚拟机的内存管理系统要求对象起始地址必须是8字节的整数倍,所以对象头正好是8字节的倍数。因此当对象实例数据部分没有对齐的话,就需要通过对齐填充来补全

你可能感兴趣的:(javase,java对象内存布局)