ArrayBlockingQueue:用于性能优化的局部 Final 变量
在 ArrayBlockingQueue 类中,值得注意的是,某些方法会在之前将成员字段复制到局部 Final 变量调用关键操作。
例如,在 Offer() 中方法:
public boolean offer(E e) { ... final ReentrantLock lock = this.lock; lock.lock(); ... }
这里将this.lock复制到局部变量lock中。这种做法也扩展到其他成员字段,例如 extract() 方法中的 E[] 项。
鉴于成员字段已被声明为最终成员字段,人们可能会质疑这些本地副本的必要性。然而,有一个微妙的性能优化在起作用。
根据该类的作者 Doug Lea 的说法,复制到局部变量会产生更小的字节码。对于低级代码,此优化可以稍微减少与检索和使用成员字段相关的开销,特别是对于频繁调用的方法。
正如 core-libs-dev 邮件列表线程中所述,此优化“产生最小的字节码,并且编写更接近机器的代码是很好的。”
以上是为什么ArrayBlockingQueue使用局部final变量来进行性能优化?的详细内容。更多信息请关注PHP中文网其他相关文章!