在方法内将变量声明为final会提高性能吗?

9

在最新的Java版本中,在方法内将变量声明为final是否从性能/内存角度带来任何好处?

我这里不是在谈论其他任何好处。

这个问题"在Java中使用final关键字是否会提高性能?"已经被讨论了近7年,自那时以来已经取得了一些进展。


2
有趣。最初的反应是说“当然不行,给你一个踩”。但这个问题很深刻:Java编译器是否已经变得聪明到可以基于此进行优化?有哪些可以进行优化的地方呢?我会给你一个赞!(不过我会考虑删除内存标签,并替换为性能标签)。 - Bathsheba
3
从Java SE 8开始,变量或参数在初始化后不会再被改变的情况下,被认为是有效final(effectively final)。此外,JIT可以对final或有效final变量进行一些优化。 - xyz
1
@Bathsheba已经这样做了。 - aurelius
2
@M.Navy:这个问题已经被问了将近7年了。 - aurelius
@sbjavateam:你说得没错,但如果变量已经是final的,就不必再进行检查了。 - aurelius
2
@aurelius 那又怎样?与其创建一个重复的问题,不如在现有的问题上添加赏金,并注明原因,比如“我想获取关于该主题的最新数据”或其他。 - Oleg Estekhin
2个回答

3

不,局部变量上的final关键字没有性能影响,即使在理论上也不可能,因为.class文件不保留此信息。

有关详细信息,请参见此答案


2

final关键字对于变量而言没有直接的性能影响,但在某些用例中可以提高性能。
例子:

  1. 当在循环中迭代时,如果变量是final,那么JIT将不会检查任何可能改变列表值的原因(参考)。
  2. final允许将变量内联到调用代码中,这可能会导致一些内存和性能上的改进。当您在类中拥有许多公共静态最终字符串时使用此功能(参考)。
  3. final关键字可以改善性能。不仅JVM可以缓存最终变量,应用程序也可以缓存经常使用的最终变量(请查看第3和第4个链接)。
  4. final关键字允许JVM优化方法、变量或类。

请提供您的帖子中的用例,您将获得我的点赞。 - aurelius

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接