是否将经常使用的字段分配给局部变量更有效?

bil*_*.cn 2 java

我是读java.util.HashMap,发现它几乎总是在分配table领域的一个局部变量,如果使用该值比方法一次.

由于这个类被记录为不是线程安全的,并且字段不易变,这有什么意义呢?它是否使代码更有效?

Ger*_*cke 5

通过将成员字段放入本地作用域(即当前堆栈帧),可以修复该方法的整个执行的引用.因此,对于每次使用,您都对相同的对象具有相同的引用.

如果不将其放入本地范围,则每次访问该字段都是通过this引用(隐式或显式).因此,对于每次访问,JVM必须获取字段的当前值 - 理论上可能在上次访问后发生更改.

除了更可靠之外,JIT可以优化访问,即循环(内联值,无论如何).

对性能的影响相当小,但可以衡量.