首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >内禀锁同步

内禀锁同步
EN

Stack Overflow用户
提问于 2015-12-22 06:51:32
回答 1查看 67关注 0票数 5

我正在读B. Goetz在实践中的Java并发性,现在我正在读关于锁的部分。他说

每个对象都有内置的锁,这只是一种方便,因此不必显式地创建锁对象。 9回顾一下,--这个设计决策--可能是一个糟糕的决策:它不仅会令人困惑,而且会迫使JVM实现者在对象大小和锁定性能之间进行权衡。

因为,我刚开始并发,他说的是什么设计决策并不明显。从性能角度看,创建显式锁对象是不好的,不是吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-22 07:03:51

我自己从来没有实现过JVM,甚至也没有参与过它的开发,但是我可以想象这种权衡。

想到将内部锁关联到每个对象的第一个想法就是这样做:将锁与它的状态(am I锁定,哪个线程)关联到JVM中创建的每个对象,并与对象状态的其余部分并置。这应该是有效的,但是,它也使每个创建的对象在内存中占用额外的空间,并且这个空间在大多数情况下都不会被使用(因为同步并不那么常见,而且大多数对象从未被用作锁)。

另一个想法是维护某种独立的懒散字典,只有当这个对象被实际用作锁时,它才会为对象创建一个锁及其状态。这是显而易见的,而且可能效率较低,因为字典需要与对象并行维护,等等,但是它在内存中使用的空间会更少。

因此,我认为,这就是Brian所谈论的权衡(或部分权衡)。如果只有特定的对象可以充当锁,那么它确实不会那么混乱,而且实现可能会更简单。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34410012

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档