是否有任何性能原因在Java中声明方法参数final?

时间:2008-11-05 21:38:59

标签: java performance final

在Java中声明方法参数final是否有任何性能原因?

如:

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

对战:

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

假设bar仅在foo()中被阅读且永不修改。

5 个答案:

答案 0 :(得分:94)

final关键字没有出现在本地变量和参数的类文件中,因此它不会影响运行时性能。它的唯一用途是澄清编码人员意图变量不被改变(许多人认为它的使用可疑的原因),以及处理匿名内部类。

关于方法本身的最终修饰符是否有任何性能提升存在很多争论,因为无论修饰符如何,方法都会在运行时由优化编译器内联。在这种情况下,它也应该仅用于限制方法的覆盖。

答案 1 :(得分:14)

最终参数的唯一好处是它可以在匿名嵌套类中使用。如果一个参数永远不会改变,即使没有最终修饰符,编译器也会检测到它是正常操作的一部分。很少有错误是由意外分配的参数引起的 - 如果你的方法足够大,需要这种级别的工程,让它们变小 - 你调用的方法不能改变你的参数。

答案 2 :(得分:0)

在类加载后运行的编译器(如JIT编译器)可以利用最终方法。因此,声明为final的方法可能会带来一些性能优势。

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

哦,另一个好资源

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

答案 3 :(得分:0)

再说一点,使用在方法中声明的非最终局部变量 - 内部类实例可能比堆栈帧更长,因此局部变量可能在内部对象仍然存活时消失

答案 4 :(得分:-2)

我假设编译器可能会删除所有具有基本类型的私有静态最终变量,例如int,并将它们直接嵌入代码中,就像使用C ++宏一样。

但是,我不知道这是否在实践中完成,但可以这样做以节省一些内存。