2010-10-05 69 views
3

我最近检查了OpenJDK的来源落实jucCopyOnWriteArrayList,发现里面的类定义的锁变量,则重新声明与下面的语句为什么jucCopyOnWriteArrayList创建内部方法局部锁变量

final ReentrantLock lock = this.lock; 

内的所有需要这个变量的方法。对变量进行重新声明的任何具体原因(可能隐藏全局变量)。不能直接使用对象的“锁定”字段。

+1

这是基本上相同的问题,具有相同的答案,因为这个:http://stackoverflow.com/questions/2785964/in-arrayblockingqueue-why-copy-final-member-field-into-local-final-变数 – ColinD 2010-10-05 18:45:50

+0

同意,虚拟欺骗,并在那里很好的答案。 – andersoj 2010-10-17 00:00:24

回答

7

这只是一种微观优化技术。从理论上讲,访问局部变量比访问字段更快,也可能导致更小的字节码。尽管HotSpot编译器实际上可以优化对寄存器调用的字段访问,所以它不会有所不同。

+1

我不确定这只是理论。每当你进入这个领域时,你都需要有最后的领域障碍来保证正确性。如果JIT优化了第二次读取,因为它是最终字段,这是“理论上的”。 – 2010-10-08 00:33:49

相关问题