问题:在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