1. 对象头分为两种,一个是正常的对象,一个是数组对象。
以32位的虚拟机为例,正常对象markword 所占的长度为32位,klass word 也占32位,该字段代表该对象属于什么类的,例如一个学生对象,那么这个klass word 表示的是Student类型。
数组对象比正常对象多的一个32位就是数组的长度。
2. markword 的结构。
markword中结构的不同代表不同的意思。
- 正常状态,也就是没加锁,包含的字段有hashcode 分代年龄age,是否是偏向锁biased_lock 值为0,后两位为正常类型01
- 偏向锁状态,偏向哪个线程的线程ID,周期epoch,分代年龄age,是否是偏向锁biased_lock 值为1,后两位为偏向状态类型01
- 轻量级锁的状态,前30位代表指向锁记录的地址,后两位代表轻量级锁00
- 重量级锁的状态,前30位代表指向重量级锁的地址,后两位代表重量级锁10
文章评论