我正在阅读java.util.HashMap
的{{3}},并注意到如果在方法中多次使用该值,它几乎总是将table
字段分配给局部变量。
由于此类被记录为不是线程安全的并且字段不易变,这有什么意义呢?它是否使代码更有效率?
答案 0 :(得分:5)
通过将成员字段放入本地作用域(即当前堆栈帧),可以修复该方法的整个执行的引用。因此,对于每次使用,您都对相同的对象具有相同的引用。
不将其放入本地范围,每次访问该字段都是通过this
引用(隐式或显式)。因此,对于每次访问,JVM必须获取该字段的当前值 - 理论上可能在上次访问后发生更改。
除了更可靠之外,JIT可以优化访问,即循环(内联值,无论如何)。
对性能的影响相当小,但可以衡量。