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