为什么jucCopyOnWriteArrayList在方法内创建局部锁变量

use*_*158 3 java concurrency

我最近在OpenJDK的源代码中检查了jucCopyOnWriteArrayList的实现,发现在类中定义的lock变量是用以下语句重新声明的

final ReentrantLock lock = this.lock;
Run Code Online (Sandbox Code Playgroud)

在所有需要此变量的方法中.进行变量重新声明的任何特定原因(可能隐藏全局变量).我们不能直接使用对象的"锁定"字段.

Eug*_*hov 7

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