一些收藏Java

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

2020-10-26  本文已影响0人  胖达_4b7e

对象

public class L {
}


对象:

加一个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(可偏向+现在是偏向锁)


上一篇下一篇

猜你喜欢

热点阅读