为什么将类定义为 Final 可以提高 JVM 性能?

2024-03-09

引用自http://sites.google.com/site/gson/gson-design-document http://sites.google.com/site/gson/gson-design-document:

为什么Gson中的大多数类都标记为 最终的?

虽然 Gson 提供了相当 通过提供可扩展的架构 可插拔序列化器和 反序列化器,Gson 类不是 专门设计为 可扩展的。提供非最终 类将允许用户 合法地扩展 Gson 类,并且 然后期望该行为起作用 所有后续修订。我们选择 通过标记来限制此类用例 课程作为最后的课程,并等待直到 好的用例的出现允许 可扩展性。标记班级期末考试 还有一个小好处是提供 额外的优化机会 Java编译器和虚拟机。

为什么会这样呢? [如果我猜测:JVM知道类是final的,它不维护方法覆盖表?还有其他原因吗?]

对性能有什么好处?

这是否适用于频繁实例化的类(POJO?)或者可能适用于持有静态方法的类(实用程序类)?

定义为final的方法理论上也能提高性能吗?

有什么影响吗?

谢谢你, 格言。


虚拟(重写)方法通常是通过某种最终是函数指针的表(vtable)来实现的。每个方法调用都有必须经过该指针的开销。当类被标记为 Final 时,所有方法都不能被覆盖,并且不再需要使用表 - 这会更快。

某些虚拟机(例如 HotSpot)可能会更智能地执行操作,并知道方法何时被覆盖/不被覆盖,并酌情生成更快的代码。

Here https://wiki.openjdk.java.net/display/HotSpot/Main是有关 HotSpot 的一些更具体的信息。还有一些general https://wiki.openjdk.java.net/display/HotSpot/VirtualCalls信息也。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么将类定义为 Final 可以提高 JVM 性能? 的相关文章

随机推荐