那么对象锁在内存中是怎样的呢?接下来就来看一下对象锁的实现细节。对象锁的状态是记录在对象头中的Mark word区域中。关于对象的内存区域的细节,大家可以参考前文
《Java面试必考问题:对象在内存中是如何布局的? 》。在不同的锁状态下,Mark word会存储不同的信息,这也是为了节约内存常用的设计。当锁状态为重量级锁(锁标识位=10)时,Mark word中会记录指向Monitor对象的指针,这个Monitor对象也称为管程或监视器锁
每个对象都存在着一个 Monitor对象与之关联。执行 monitorenter 指令就是线程试图去获取 Monitor 的所有权,抢到了就是成功获取锁了;执行 monitorexit 指令则是释放了Monitor的所有权