深入理解Java虚拟机 Chapter13

深入理解Java虚拟机 Chapter13#

线程安全#

当多个线程访问一个对象时,如果不考虑这些线程在执行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那么这个对象是线程安全的

  1. 不可变

  2. 绝对线程安全

  3. 相对线程安全

  4. 线程兼容

  5. 线程对立

锁优化#

HotSpot虚拟机对象头Mark Word

存储内容 标志位 状态
对象哈希码、对象分代年龄 01 未锁定
指向锁记录的指针 00 轻量级锁定
指向重量级锁的指针 10 膨胀(重量级锁定)
空,不需要记录信息 11 GC标记
偏向线程ID、偏向时间戳、对象分代年龄 01 可偏向

偏向锁、轻量级锁的状态转化及对象Mark Word的关系

jvm-lock-mark-word-min-min