Java对象头和锁

几种锁的类型

⼀个对象有四种锁状态,它们级别由低到⾼依次是:

  1. ⽆锁状态
  2. 偏向锁状态:适⽤于只有⼀个线程访问同步块场景。
  3. 轻量级锁状态:追求响应时间。同步块执⾏速度⾮常快。
  4. 重量级锁状态:重量级锁依赖于操作系统的互斥量实现,操作系统中线程状态转换需要相对比较长的时间,所以重量级锁效率低,但被阻塞的线程不会消耗CPU,追求吞吐量。同步块执⾏速度较⻓。

⼏种锁会随着竞争情况逐渐升级,锁的升级很容易发⽣,但是锁降级发⽣的条件会⽐较苛刻,锁降级发⽣在Stop The World期间,当JVM进⼊安全点的时候,会检查是否有闲置的锁,然后进⾏降级。


对象头

Java的锁都是基于对象的,对象的锁信息放在对象头中。

每个Java对象都有对象头。如果是⾮数组类型,则⽤2个字宽来存储对象头,如果是数组,则会⽤3个字宽来存储对象头。

在32位处理器中,⼀个字宽是32位;在64位虚拟机中,⼀个字宽是64位。对象头的内容如下:

Mark Word(运行时元数据)的内容如下:


参考资料

本文参考于这里

posted @ 2020-09-25 16:30  swifthao  阅读(374)  评论(0编辑  收藏  举报
Live2D