2016-09-28 15 views
0

私はこのquestionの回答を見ていました。instanceofはポリモーフィックコールよりもどのように速くなりますか?

instanceofequalsのような多型呼び出しよりも速く判明した可能性があります。

+3

あなたは、Gistコードとグラフで長く詳細な答えを意味しますか?その答えはインスタンスである、壊れたマイクロベンチマークではすべてが可能です。 –

+0

あなたはすでにあなたの答えをリンクしています==残りの==残りのリンクされた質問と同様、リンクのすべての答えを探せます –

+0

@マルコトポルニク:いいえ、長くて詳細な答えはそのような主張をしません。私は、この質問は2つの全く関係のない操作(文字列の等価性チェックと 'instanceof'演算子)を比較する、2番目に(望ましくない)upvoted質問を参照します。 – Holger

答えて

3

あなたはあまりにも多くのアップフォースを得るのではなく、地面にdownvotedするべきであるthis answerを指していると思います。まず、テスト中の実際のコードを表示せずにベンチマークツールの名前をつけて投稿した数字は、質の高い解答ではなく(おそらく)興味深いコメントであると考えられるべきです。

第2に、この回答は、全く関係のない2つの操作、つまりStringの等価チェックとinstanceof演算子を比較します。その答えは、(あなたのような)読者に、Javaのメソッドディスパッチのコストについてのあらゆる知見があると考えるように誤解しますが、そのコストを孤立して測定する方法はありません。 作業X(文字列比較のような)を実行するメソッドを呼び出すコストを測定する場合、基本的に呼び出しコストではなく作業X(文字列比較)のコストを測定しています。 instanceofは文字列の比較を実行しないので、String.equalsを呼び出すよりも動作が少ないことは明らかです。特にString.equals(Object)の実装では、引数にinstanceofがあります。

String.equalsを呼び出すと、instanceof操作を実行するよりもコストがかかり、まったく異なる質問に対する回答が得られます。リンクされた答えは、これが実際に起こったことを証明するのに十分ではありません。 10,000,000回のループに対して80±17msと168±62msを測定することは、ループ本体の実際のコストが統計的ノイズの深いところに埋もれているという明確な兆候です。

さらに、String.equalsは多型呼び出しを考慮することさえできません。

関連する問題