Java中将方法参数声明为final有性能方面的原因吗?

问题描述 投票:0回答:4

Java中将方法参数声明为final有性能方面的原因吗?

如:

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

对比:

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

假设

bar
foo()
中仅被读取且从未被修改。

java performance final
4个回答
100
投票

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

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


15
投票

最终参数的唯一好处是它可以在匿名嵌套类中使用。如果参数从未更改,即使没有最终修饰符,编译器也会将其检测为正常操作的一部分。由意外分配的参数引起的错误非常罕见 - 如果您的方法足够大,需要这种级别的工程,请将它们缩小 - 您调用的方法无法更改您的参数。


0
投票

还有一点,就是上面使用方法内声明的非最终局部变量——内部类实例可能比堆栈帧还长,因此当内部对象仍然存在时,局部变量可能会消失


-1
投票

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

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

哦,还有另一个好资源

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

© www.soinside.com 2019 - 2024. All rights reserved.