JVM 的Lock Record简介

Lock Record用于偏向锁优化和轻量级锁优化。

Lock Record的数据结构

lock record保存对象mark word的原始值,还包含识别哪个对象被锁的所必需的元数据。

在openjdk中通过两个类BasicObjectLock和BasicLock来实现

// A BasicObjectLock associates a specific Java object with a BasicLock.
// It is currently embedded in an interpreter frame.
class BasicObjectLock {
  friend class VMStructs;
 private:
  BasicLock _lock; // 锁, must be double word aligned
  oop       _obj; // 持有锁的对象
};


class BasicLock {
 private:
  volatile markOop _displaced_header;
};

lock record的创建时机

当字节码解释器执行monitorenter字节码轻量地锁住一个对象时,就会在获取锁的线程的栈上显式或隐式分配一个lock record。

lock record的创建位置

Interpreted frames contain a region which holds the lock records for all monitors owned by the activation. During interpreted method execution this region grows or shrinks depending upon the number of locks held.

解释帧包含一个区域,该区域保存激活拥有的所有监视器的锁记录。在解释的方法执行期间,该区域根据持有的锁数量增长或缩小。

所以lock record在线程的Interpretered Frame上(解释帧)分配。

作用

持有displaced word和锁住对象的元数据;
解释器使用lock record来检测非法的锁状态;
隐式地充当锁重入机制的计数器;

参考

  • 《Eliminating Synchronization-Related Atomic Operations with Biased Locking and Bulk Rebiasing》
    https://wiki.openjdk.java.net/display/HotSpot/Synchronization
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值