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

时间:2016-10-25 09:48:35

标签: java

我正在阅读java.util.HashMap的{​​{3}},并注意到如果在方法中多次使用该值,它几乎总是将table字段分配给局部变量。

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

1 个答案:

答案 0 :(得分:5)

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

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

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

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