instanceof如何比多态调用更快?

时间:2016-09-28 06:36:07

标签: java jvm

我正在查看此question的答案。

instanceof怎么可能比equals这样的多态调用更快。

1 个答案:

答案 0 :(得分:3)

我想,你指的是this answer应该被投入到地面而不是获得如此多的赞成。首先,任何未显示正在测试的实际代码或命名任何基准测试工具的数据都应被视为(可能)有趣的评论而非质量答案。

其次,这个答案比较了两个完全不相关的操作,String等式检查和instanceof运算符。这个答案误导了读者(像你一样)认为它对Java的方法调度成本有任何发现,但没有办法单独衡量这个成本。如果你衡量调用 work X 的方法的成本(比如字符串比较),你基本上是衡量 work X 的成本(字符串比较),而不是调用成本。由于instanceof不执行字符串比较,因此显然它比调用String.equals做的工作少。特别是,因为String.equals(Object)的实现甚至对论证进行了instanceof

因此,当调用String.equals比执行单独的instanceof操作带来更多成本时,你不应该感到惊讶,给出一个完全不同的问题的答案。相关联的答案仍然不足以证明这确实发生了。对于10,000,000次迭代的循环,测量80±17ms和168±62ms是一个明显的迹象,表明环状体的实际成本深埋在统计噪声之下。

除此之外,String.equals甚至不能考虑多态调用。