java - 使用 `final` 方法

标签 java keyword final

我知道 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/

相关文章:

java - 为minecraft 1.12 modding搭建编程环境,遇到gradle反编译错误

indexing - iTunes 商店 : App keyword search optimization. 字符串智能索引?

seo - 防止谷歌得到错误的关键字

sql - 如何创建用于搜索部分匹配项的 sql 查询?

java - 我想将最终变量初始化为函数

java - 来自 bash 命令行的 Java Heredoc

java - 如何处理 Java 8 比较器中的空值和重复值?

c++ - 编译器如何从 C++ 的新 final 关键字中受益?

java - 拥有一个仅包含公共(public)静态最终字段的 Java 类有什么好处?

java - CyclicBarrier 线程安全吗?