【发布时间】:2011-04-27 02:06:41
【问题描述】:
引用http://sites.google.com/site/gson/gson-design-document:
为什么 Gson 中的大多数类都标记为 决赛?
虽然 Gson 提供了一个相当 通过提供可扩展架构 可插拔序列化器和 反序列化器,Gson 类不是 专门设计为 可扩展的。提供非最终 类将允许用户 合法地扩展 Gson 类,并且 然后期望该行为起作用 所有后续修订。我们选择了 通过标记限制此类用例 类作为最终的,并等到一个 出现好的用例以允许 可扩展性。标记班级决赛 还有一个小小的好处是提供 额外的优化机会 到Java编译器和虚拟机。
为什么会这样? [如果我猜:JVM 知道类是最终的,它不维护方法覆盖表吗?还有其他原因吗?]
对性能有什么好处?
这是否适用于频率实例化的类(POJO?),或者可能适用于持有静态方法的类(实用程序类)?
定义为final的方法理论上也能提高性能吗?
有什么影响吗?
谢谢你, 马克西姆。
【问题讨论】:
-
我敢肯定,如果您搜索 SO,您会找到答案;我记得几天前的一个。但无论如何,我建议您忽略最后一句话;该段的其余部分是重要的。
-
我要求仅用于学习目的。想要一个链接,因为我还没有找到这样的链接(在询问之前进行了快速搜索)。
-
同意,标记类
final的好处更多地在于记录它们的设计(或缺乏)以实现可扩展性而不是性能。 (另一方面,这不是@Maxim Veksler 所问的......) -
我知道没有相对健全的 JVM 会跳过 CHA(类层次结构分析),所以最终类没有任何改进。
-
据我了解,是 JIT 对
final而非 JVM 进行任何优化。 See this article for more details.
标签: java performance optimization jvm final