在Java里面使用instanceof的性能影响

现代JVM和JIT编译器优化了instanceof的性能,使其不再是主要的性能瓶颈。在大多数情况下,过度优化如使用‘typeid’和掩码比较可能是不必要的。除非有确凿的性能问题,否则不建议过于关注此类微观优化。遵循‘过早优化是万恶之源’的原则,保持代码简洁易读更为重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题:在Java里面使用instanceof的性能影响

我正在写一个应用程序,其中一种设计方案包含了instanceof操作的大量使用。虽然我知道面向对象设计通常试图避免使用instanceof,但那是另一回事了,这个问题纯粹只是讨论与性能有关。我想知道这是否会对性能产生任何影响?它和 ==一样快速吗?

例如,我有一个有10个子类的父类。在接受父类作为参数的单个函数中,我检查这个类是否是子类的实例,并执行一些程序。

我想到的解决它的另一种方法是使用一个“type id”原始整型代替,并使用掩码表示子类的类别,然后只让子类“type id”和一个常量掩码做一次掩码的比较,比较的结果就用来表示类别。

instanceof是否被JVM优化到比这更快?我想坚持使用Java,但是这个应用程序的性能是至关重要。如果以前有过类似经历的人能提供一些建议,那就太棒啦。我是不是太挑剔了,或者说把注意力放在优化错误的东西上面了?

回答

现代的JVM/JIT编译器已经消除了大多数传统的“慢”操作(包括实例化、异常处理、反射等。)产生的性能影响。

正如Donald Knuth所写,“我们应该忘记小的效率问题,可以说大约97%的情况下:过早的优化是万恶之源。”instanceof的性能可能还没有成为一个问题,所以不要浪费时间去想一些复杂的解决方案,除非你确定这已经出现问题了。

文章翻译自Stack Overflow:https://stackoverflow.com/questions/103564/the-performance-impact-of-using-instanceof-in-java

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值