当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《是否有任何性能原因在Java中声明方法参数final?》经验,为你挑选了2个好方法。

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

如:

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

与:

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

假设bar只读取并且从未修改过foo().



1> Robin..:

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

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


我已经看到,当两种方法之间的唯一区别是局部变量的"最终性"时,Sun的编译器会发出稍微短的字节码.微优化是一个真实的东西,编译器实际上做了它们.当然,真正重要的是JIT对字节码的作用,当编译为字节码时,本地引用失去了它们的"终结性".我认为这就是为什么对最终的局部变量有如此多的推测:结果是非常不确定的.但是,使用最终本地可以影响字节码 - 它的价值.
你认为最终的变量/参数可以作为循环变量进行优化但是...但是一个好的编译器/运行时应该能够在没有最终的情况下解决这个问题......

2> Dobes Vander..:

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


"非常罕见的是,错误是由意外分配的参数引起的".它比你想象的更常见......
@RAY你可能是对的,实际上我没有任何数据(超出我自己的经验)来支持这种说法.
推荐阅读
小色米虫_524
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有