我知道 final
关键字在方法上的用途之一是强制子类使用相同的方法实现。但是,通过允许编译器将对方法的调用转换为内联 java 代码来提高效率是什么意思呢?我刚读到这篇文章,但不太理解这个想法。
到这个程度,我不明白内联Java代码的含义。如何调用 final
方法?在编译调用 final
方法的代码期间,Java 是否会通知或执行任何特殊操作?
最佳答案
如果您使用 final,字节码的效率不会有明显的提高或降低,因为 Java 字节码编译器通常很少进行优化。效率奖励(如果有的话)将出现在 JIT 编译器生成的 native 代码中。
理论上,使用 final 可以为 JIT 编译器提供一个提示,帮助它进行优化。实际上,最近的 HotSpot JIT 编译器可以通过忽略您的提示来做得更好。例如,现代 JIT 编译器通常会执行全局分析,以查明给定方法调用是否是对应用程序当前加载类的上下文中的叶方法的调用。此分析比您的最终提示更准确,运行时甚至可以检测何时加载了使分析无效的新类……并为受影响的代码重做分析和 native 代码生成。
所以最好的做法是使用 final 来(广义上)表达你的设计意图,并实现你需要的其他语义效果。 (例如,使用 final 修饰符可以在实现线程安全的不可变类型方面发挥重要作用。)如果您使用 final 作为优化提示,您将不会取得太大成就,并且会使您的代码更难修改和扩展。
字体:link
关于java - 使用 `final` 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18405105/