Is there any performance reason to declare method parameters final in Java?

Is there any performance reason to declare method parameters final in Java?

As in:

public void foo(int bar) { ... }

Versus:

public void foo(final int bar) { ... }

Assuming that bar is only read and never modified in foo().

28860 次浏览

在类加载之后操作的编译器(如 JIT 编译器)可以利用最终方法。因此,声明为 final 的方法可能具有一些性能优势。

Http://www.javaperformancetuning.com/tips/final.shtml

哦,还有一个很好的资源

http://mindprod.com/jgloss/final.html

Final 参数的唯一好处是可以在匿名嵌套类中使用。如果一个参数从未被更改过,编译器就会将其作为正常操作的一部分进行检测,即使没有最后的修饰符。很少有 bug 是由意外分配的参数引起的——如果您的方法大到需要这种级别的工程,那么将它们变小——您调用的方法不能更改您的参数。

The final keyword does not appear in the class file for local variables and parameters, thus it cannot impact the runtime performance. It's only use is to clarify the coders intent that the variable not be changed (which many consider dubious reason for its usage), and dealing with anonymous inner classes.

关于方法本身的最终修饰符是否有任何性能提升存在很多争议,因为无论修饰符是什么,方法在运行时都会被编译器最佳化内联。在这种情况下,它也应该只用于限制方法的重写。

我假设编译器可以删除所有具有原语类型(比如 int)的私有静态 final 变量,并将它们直接内联到代码中,就像使用 C + + 宏一样。

然而,我不知道这是否在实践中做到了,但它可以做到这一点,以节省一些记忆。

还有一点,就是使用在方法中声明的非最终局部变量ーー内部类实例可能比堆栈框架存在的时间长,因此局部变量可能在内部对象仍然存在的时候消失