先从整体结构说起吧:
在这里,说的都是在64位机下!!!
1.对象头
2.实例数据
3.对其填充
对象头
1.Mark Word
2.Klass Pointer
3.数组长度
4.对其填充
Mark Word:
长度为8字节
identity_hashcode: 记录对象的hash值;采用延迟加载技术,在对象调用了hashCode()计算时,才会将hash值记录到Mark Word中;当对象被锁定后,值会被移动到线程Monitor中
age: 经过多少次GC(minor gc | full gc)
biased_lock: 是否是偏向锁的标志; 1为偏向锁,0不是
lock:
01: 无锁
01: 偏向锁
00: 轻量级锁
10: 重量级锁
11:GC标记
thread: 持有偏向锁的线程ID和其他信息
epoch: 偏向时间戳
ptr_to_lock_record:执行栈中锁记录的指针
ptr_to_heavyweight_monitor:指向线程Monitor的指针
|--------------------------------------------------------------------------------------------------------------|
| Object Header (128 bits) |
|--------------------------------------------------------------------------------------------------------------|