对象
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(可偏向+现在是偏向锁)

网友评论