在着名的实践中的Java Concurrency第2.4节中,它指出内部锁定方法与显式锁定不同是一个糟糕的设计决策,因为它的混淆和“......它迫使JVM实现者在对象大小和锁定之间进行权衡性能。” 有人可以解释如何对象大小影响锁定性能?Java中的对象大小和锁定性能之间是否存在关系?
6
A
回答
5
那么因为每个对象都可以锁定,这意味着每个对象都必须有足够的位置来存储锁定时需要的所有信息。
这是相当没有吸引力的,因为绝大多数的物体永远不会被锁定,所以我们浪费了大量的空间。所以在实践中,Hotspot通过使用2位来记录对象的状态并根据这两位重用对象头的其余部分来解决这个问题。
然后是整个偏向/无偏向锁定的东西..好吧,你可以开始阅读关于它here。热点文档不是我所谓的扩展,但锁定和对象头文件比其他大多数代码更好。但有疑问:阅读源代码。
PS:我们也有类似的问题,也是每个对象的本地哈希码。如果你的GC洗牌的话,“只用内存地址”就不太好。 (但是与锁定相反,如果我们需要此功能,则没有真正的选择)
2
最有效的锁使用原生字大小,例如32位字段。但是,您不希望将4个字节添加到每个对象,而是使用AFAIK 1位,但设置此位比设置字大小更昂贵。
相关问题
- 1. java包和目录之间是否存在一对一的关系?
- 2. JAVA - 两个对象之间的关系
- 3. 使用ScaleTransform和直接设置大小之间是否存在性能差异?
- 4. 数据库表和面向对象类之间是否存在关系?
- 5. 假设隐式和显式打印之间的性能差异与对象大小有关是否安全?
- 6. 锁定LOH中的对象是否影响GC性能?
- 7. 什么gettable,可设定和存储性能之间的关系,计算性能
- 8. 在Java对象和类之间的关系
- 9. DFA和Loop,NFA和递归之间是否存在关系?
- 10. 在Java中使用大量对象是否存在性能问题
- 11. 锁定(this)和静态对象锁定之间的区别
- 12. 操作系统中页面大小和页面大小之间的关系
- 13. RAM大小和虚拟内存之间的关系与JVM堆大小
- 14. 在Java中,新建和本地之间是否存在性能差异?
- 15. 图像大小和字体大小之间的关系是什么?
- 16. Java对象和类/接口之间的关系程度?
- 17. 核心数据 - 找出两个对象之间是否存在关系
- 18. schema.org数据集和wikidata之间是否存在映射关系?
- 19. schema.org和WAI-ARIA之间是否存在关系?
- 20. 视图和模型之间是否存在依赖关系?
- 21. RTTI和异常之间是否存在关系?
- 22. DOM元素和HTML元素之间是否存在1对1的关系?
- 23. 对象实例和同步的管家数据中的锁定信息之间的关系是什么?
- 24. 在android中TextView的字体大小和高度之间的关系是什么?
- 25. JAVA中Synchronized和Final之间的关系
- 26. concat和||之间是否存在性能差异?在oracle
- 27. C++对象是否有固定大小?
- 28. Java:字体的点大小与其渲染范围之间是否存在线性关联?
- 29. Java中的runLater块之间是否存在并发性?
- 30. RenderPartial和Partial之间是否有任何大的性能差异?
与'synchronized'类型的锁应该没有关系(从我的实现经验来看),并且从简要回顾Java 5锁定方案,我不会直接看到那里可能存在依赖关系。当然,它实际上需要更多的存储空间来实现单独的'Lock'对象,但这应该是一个固定的开销。 – 2011-12-29 16:02:47
@HotLicks多数民众赞成在我感到惊讶,大小shudnt有任何额外的开销,谢谢! – meer 2011-12-30 11:22:57