2015-12-22 23 views
4

我在阅读B. Goetz's Java concurrency in pratice现在我在关于锁定的部分。他说,与固有锁同步

,每个对象都有一个内置的锁只是一个方便 ,让你不必明确创建锁objects.9

9回想起来其实这样的设计决策可能是一个坏的问题:它不仅会令人困惑,而且会迫使JVM实现者在对象大小和锁定性能之间进行权衡。

因为,我是新来的并发性,他不清楚他在说什么设计决定。从性能角度来看,创建显式锁定对象是不好的,不是吗?

+0

决定每个对象都有一个内置锁。这就是他正在谈论的。 – Fildor

+1

这是我猜不是所有的对象都需要并发锁定,所以它消耗的内存更多。多余的东西总是会影响性能。因为即使你没有使用它们,你也需要管理它们。 – YoungHobbit

回答

2

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

想到将内部锁与每个对象相关联的第一个想法就是:将锁与其状态(我是否被锁定,由哪个线程)关联到JVM中创建的每个对象,与其余的对象状态共处。这应该是有效的,但是,它也会使每个创建的对象在内存中占用额外的空间,并且该空间大部分时间都不会被使用(因为同步不常见,并且大多数对象从不用作锁) 。

另一种想法是维护某种单独的延迟字典,只有当该对象实际用作锁时,才会为对象创建锁及其状态。这很明显,可能效率较低,因为字典需要与对象并行维护等,但它会占用较少的内存空间。

因此,我认为这是Brian Goetz谈论的权衡(或权衡的一部分)。它确实不那么令人困惑,如果只有特定的对象可以充当锁,那么实现可能会更简单。

+0

啊,现在我看到了权衡。非常感谢。 –