synchronize原理-对象头mark word对象大小(gold_axe)

对象

public class L {
}


对象:

  • 12字节的头
  • 4字节 对齐填充 因为jvm以8字节的倍数 为一个slot 最小等我

加一个field int a;


没有变大, 刚好不用填充了

对象头

就是任意对象都要有的开头
如上文所述, 12字节, 就是96bit



后4字节 就是32bit , 指向所属class

mark word

8字节, 64位


hash

无锁 却不可偏向, 是因为 已经算了hash值了, 放了hash值就没地方放 偏向的线程id了,
不能偏向, 一来就是轻量锁, 因为轻量锁直接把原来的markword 放到抢到锁的线程的栈里面了, 就有地方放hash了
如果还没被当过锁, 就是还没偏向, 并且 么算过hash, 那么 那块就都是 0

是倒过来放的


这是小端模式 就是比如 int i=1, 实际存储是, 打印出来就感觉反了


unused


这25bit 永远是0



这bit也是

age

biased_lock 偏向标识

0不可偏向: 因为已经hash了
1可偏向(不一定是不是在偏向了)



↓ 加偏向锁以后 101(可偏向+现在是偏向锁)


©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。