首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >叶子节点类中的Sealed关键字

叶子节点类中的Sealed关键字
EN

Stack Overflow用户
提问于 2010-06-28 20:48:24
回答 4查看 317关注 0票数 1

虽然我知道sealed可以出于安全原因使用,但也有一些人在叶子节点上使用sealed关键字作为一种优化技术。

这对优化有什么帮助?为什么编译器不够聪明,不能自己解决这个问题呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-06-28 20:51:48

在密封类中,对虚方法的调用可以绕过通常的虚方法查找,而直接转到派生最多的虚方法实现。原则上,编译器/JIT也可以内联这些调用。

对于非密封类,编译器无法解决这个问题,因为任何代码都可能在编译后出现并继承自您的类:编译器必须做最坏的打算。

票数 3
EN

Stack Overflow用户

发布于 2010-06-28 20:52:41

假设您有一个在leaf类中被覆盖的虚方法。这肯定不会被进一步覆盖,因此JIT编译器可能会对已知属于该叶类的目标的该方法进行内联调用。请注意,我不知道JIT是否真的执行了这种优化。

请注意,在Java中,JVM甚至可以对非最终类执行这种优化,因为它是一个多遍HotSpot :它可以乐观地假设没有任何东西会覆盖虚拟方法,然后如果加载了覆盖它的类,则撤消它的优化。当然,由于方法在Java中默认是虚拟的,这比在C#中要大得多。(即使默认值应该不重要,但它们显然很重要。)

就我个人而言,我不使用sealed,特别是出于优化或安全原因:我使用它是因为(正确地)为继承而设计很难。我同意“为继承而设计或禁止它”的概念,并且通常发现,不能从类派生的偶尔痛苦远远超过了不用担心继承的自由。YMMV.

票数 4
EN

Stack Overflow用户

发布于 2010-06-28 20:51:13

不,它在优化方面并没有真正的帮助。不管怎么说,这不是我从侧写中看到的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3132453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档