当前位置: 首页 > 面试题库 >

在Java中使用instanceof的性能影响

华宏逸
2023-03-14
问题内容

我正在开发一个应用程序,一种设计方法涉及大量使用instanceof操作员。虽然我知道OO设计通常会尝试避免使用instanceof,但这是另一回事了,这个问题与性能完全相关。我想知道是否会对性能产生影响?是一样快==吗?

例如,我有一个包含10个子类的基类。在采用基类的单个函数中,我检查该类是否是子类的实例并执行一些例程。

我想解决的另一种方法是改用“类型ID”整数基元,并使用位掩码表示子类的类别,然后将子类“类型ID”与位掩码进行位掩码比较。代表类别的常量掩码。

instanceof JVM 是否以某种方式对其进行了优化,使其速度更快?我想坚持使用Java,但应用程序的性能至关重要。如果以前曾走过这条路的人可以提供一些建议,那将很酷。我是否挑剔或专注于错误的东西进行优化?


问题答案:

现代的JVM / JIC编译器已消除了大多数传统的“慢速”操作对性能的影响,这些操作包括instanceof,异常处理,反射等。

正如Donald Knuth所说:“我们应该忘记效率低下的问题,大约有97%的时间是这样:过早的优化是万恶之源。” instanceof的性能可能不会成为问题,因此在确定这是问题之前,请不要浪费时间来寻求新的解决方法。



 类似资料:
  • 问题内容: 我了解到Java具有运算符。你能详细说明它的使用位置及其优点吗? 问题答案: 基本上,你检查对象是否是特定类的实例。当你拥有超类或接口类型的对象的引用或参数,并且需要知道实际对象是否具有其他类型(通常更具体)时,通常可以使用它。 例: 请注意,如果你必须经常使用该运算符,通常表明你的设计存在一些缺陷。因此,在设计良好的应用程序中,你应尽可能少使用该运算符(当然,该通用规则也有例外)。

  • 问题内容: 我们已经开始将spring aop用于我们应用程序的各个方面(当前的安全性和缓存)。 我的经理虽然十分了解这种技术的好处,但仍担心该技术对性能的影响。 我的问题是,你是否遇到了使用aop(特别是spring aop)引入的性能问题? 问题答案: 只要你能够控制自己的AOP,我就认为它是有效的。无论如何,我们确实确实存在性能问题,所以通过我们自己的推理,我们无法完全控制;)这主要是因为重

  • 问题内容: 我有以下(也许是常见的)问题,此刻绝对使我感到困惑: 有几个生成的事件对象扩展了抽象类,我想将它们划分为Session Bean,例如 但是将来可能会有两种以上的事件类型,因此if- else将会很长,甚至可能无法读取。另外,在这种情况下,我认为这并不是真正的“最佳实践”。 我可以在类型中添加一个抽象方法,并让它们自行划分,但随后我必须在每个实体中注入特定的Session Bean。

  • 问题内容: 具有“ instanceof”操作链被认为是“代码异味”。标准答案是“使用多态性”。在这种情况下我该怎么办? 基类有许多子类。他们都不在我的控制之下。类似的情况是Java类Integer,Double,BigDecimal等。 我确实可以控制等。 我不想使用几行代码就能完成的代码。(有时,我制作了一个HashMap将映射到的实例,将映射到的实例,等等。但是今天我想要一些更简单的方法。)

  • 问题内容: 我有一个用户表,其中有一个用户名和应用程序列。用户名可以重复,但是用户名+应用程序的组合是唯一的,但是我没有在表上设置唯一约束(出于性能考虑) 问题:两者之间是否有任何区别(在性能方面): 和 - 由于用户名+应用程序的组合是唯一的,因此两个查询将始终返回不超过一条记录,因此TOP 1不会影响结果。我一直以为添加TOP 1会真正加快速度,因为sql server会停止寻找匹配的内容,但

  • 问题内容: 我有这个JavaWeb应用程序,它可以从电子表格上传成千上万的数据,该电子表格是从上到下按行读取的。我用来在服务器端显示应用程序当前正在读取的行。 -我知道要创建一个日志文件。实际上,我正在创建一个日志文件,同时在服务器提示符下显示日志。 还有其他方法可以在提示上打印当前数据? 问题答案: 它可能会影响您的应用程序性能。大小会因您所运行的硬件类型和主机上的负载而异。 可以将其转化为性能