【问题标题】:What's faster: instanceof or isInstance?哪个更快:instanceof 或 isInstance?
【发布时间】:2016-04-06 05:16:58
【问题描述】:

抛开设计问题不谈,什么在现代 JVM 上执行得更快?

foo instanceof Bar

Bar.class.isInstance(foo)

为什么?

【问题讨论】:

  • #1。它内置在语言中。你不会比这更好。
  • 速度快一点都不重要。
  • @LouisWasserman 我不是想做得更好,我只是好奇哪个操作更快。
  • 几乎不可能不通过测量来判断。 Class.isInstanceOf() 是 OpenJDK 中的一种内在方法(可能在每个现代 VM 中),这意味着它尽可能快。另一方面,instanceof 有自己的字节码操作,因此它可能会更快。 Hotspot 如何优化对每个调用的调用是另一回事。
  • Class.isInstance 是 JVM 固有的。它被编译成与instanceof 完全相同的序列(来自HotSpot 源代码的证明:12)。也就是说,它们在性能方面是相同的。

标签: java jvm instanceof


【解决方案1】:

Class.isInstance 是 JVM 固有的。它被编译为与 instanceof 完全相同的序列(来自 HotSpot 源代码的证明:12)。也就是说,它们在性能方面是相同的。

【讨论】:

    【解决方案2】:

    foo instanceof Bar 应该更快。

    如果在编译时不清楚你有哪个类,你可以使用Bar.class.isInstance(foo)

    考虑以下几点:

    void test(Object o1, Object o2) {
       o1.getClass().isInstance(o2);
    }
    

    在此示例中,JVM 在运行时决定哪个类调用该方法。 对于instanceof,这是不可能的。

    所以如果你在编译时就知道类,你应该使用instanceof

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-10
      • 2012-10-03
      • 2011-02-15
      • 2012-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多