在著名的 Java Concurrency in Practice 的 2.4 节中,它说内在锁定方法与显式锁定相比是一个糟糕的设计决策,因为它令人困惑并且“......它迫使 JVM 实现者在对象大小和锁定性能。” 有人可以解释对象大小如何影响锁定性能吗?
最佳答案
既然每个对象都可以被锁定,这意味着每个对象都必须有足够的空间来存储我们在锁定时需要的所有信息。
这很不吸引人,因为绝大多数对象永远不会被锁定,所以我们浪费了大量空间。所以在实践中,Hotspot 通过使用 2bits 来记录对象的状态并根据这两位重新使用对象头的其余部分来解决这个问题。
然后是整个偏向/非偏向锁定的东西..你可以开始阅读它了here . Hotspot 文档不是我所说的广泛文档,但锁定和对象 header 比其他大多数文档更好地表示。但有疑问:阅读源代码。
PS:我们对每个对象的本地哈希码也有类似的问题。如果您的 GC 随机移动对象,“只使用内存地址”并不是很好。 (但与锁定相反,没有真正的选择 - 如果我们想要此功能)
关于java - 对象大小和 Java 中的锁定性能之间有关系吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8669930/