看了些文章有些迷迷糊糊的,说法1:偏向锁在mark word里保存获取锁的线程ID时也会在线程栈帧里开辟一块空间保存lock record,此时的lock record值保存了获得锁的线程ID和一个owner指针,这个指针指向锁对象的mark word,且每次锁重入时都会重复生成lock record,且后续的lock record只保存了owner指针,而升级为轻量级锁时lock record保存的是mark word的备份和owner指针,在锁重入时也会重复生成只包含owner指针的lock record。
说法2:是偏向锁被竞争锁的线程撤销并转为轻量级锁时才会生成lock record并进行mark word的拷贝。
而我找到的官方的说法是:“When an object is lightweight locked by a monitorenter bytecode, a lock record is either implicitly or explicitly allocated on the stack of the thread performing the lock acquisition operation. ”这是否代表说法二是对的呢?还有就是关上文说法于lock record重复生成的说法是对的吗?这一块把我搞懵了,网上的文章说法都不一致,还有这篇文章
【Java并发004】原理层面:synchronized关键字全解析 - 微信公众号-标准Java - 博客园www.cnblogs.com
里面第五点提到重量级锁会降级为轻量级锁又是怎么回事呢?问题有点多很抱歉,希望大佬们能帮我解答一下,这些问题困扰我好几天了。