在Java中声明方法参数final是否有任何性能原因?
如:
public void foo(int bar) { ... }
对战:
public void foo(final int bar) { ... }
假设bar
仅在foo()
中被阅读且永不修改。
答案 0 :(得分:94)
final关键字没有出现在本地变量和参数的类文件中,因此它不会影响运行时性能。它的唯一用途是澄清编码人员意图变量不被改变(许多人认为它的使用可疑的原因),以及处理匿名内部类。
关于方法本身的最终修饰符是否有任何性能提升存在很多争论,因为无论修饰符如何,方法都会在运行时由优化编译器内联。在这种情况下,它也应该仅用于限制方法的覆盖。
答案 1 :(得分:14)
最终参数的唯一好处是它可以在匿名嵌套类中使用。如果一个参数永远不会改变,即使没有最终修饰符,编译器也会检测到它是正常操作的一部分。很少有错误是由意外分配的参数引起的 - 如果你的方法足够大,需要这种级别的工程,让它们变小 - 你调用的方法不能改变你的参数。
答案 2 :(得分:0)
在类加载后运行的编译器(如JIT编译器)可以利用最终方法。因此,声明为final的方法可能会带来一些性能优势。
http://www.javaperformancetuning.com/tips/final.shtml
哦,另一个好资源
答案 3 :(得分:0)
再说一点,使用在方法中声明的非最终局部变量 - 内部类实例可能比堆栈帧更长,因此局部变量可能在内部对象仍然存活时消失
答案 4 :(得分:-2)
我假设编译器可能会删除所有具有基本类型的私有静态最终变量,例如int,并将它们直接嵌入代码中,就像使用C ++宏一样。
但是,我不知道这是否在实践中完成,但可以这样做以节省一些内存。