为什么偏锁使用轻便锁使用不同的标记词

时间:2018-10-28 12:47:49

标签: jvm locking

当一根线保持低音锁定时。标记词是线程ID。 但是对于轻量级锁定,标记词是指向线程的堆栈指针,为什么不仍然存储线程ID?

1 个答案:

答案 0 :(得分:0)

瘦锁方案假定被锁定对象的标记字指向已锁定该对象的框架的堆栈槽。该堆栈插槽存储原始对象标头(也称为置换标头)。

    Unlocked:
    [ orig_header | 001 ]       | Stack frame |
                                |             |
    Locked:                     |             |
    [ stack_ptr   | 000 ]       |             |
         |                      |-------------|
          --------------------->| orig_header |
                                |-------------|
                                |             |
                                |             |
                                 -------------

很明显,堆栈插槽比线程ID携带更多的信息,因为您可以从堆栈插槽中获取线程ID,反之亦然。

与偏向模式不同,在偏向模式中,解锁操作实际上是无操作的,精简锁需要在对象被解锁时恢复原始标头。这变得非常简单,因为标记字已经指向具有原始值的堆栈插槽。