14

誰かが何かを言う前に、私は好奇心からこれを尋ねています。この回答に基づいて時期尚早の最適化を行う予定はありません。

私の質問は、リフレクションとキャストを使用する速度についてです。標準的なことわざは「反射が遅い」です。私の質問は、正確にどの部分が遅いのか、そしてその理由です。特に、何かが別のインスタンスの親であるかどうかを比較する場合。

オブジェクトのクラスを別の Class オブジェクトと比較するだけで、他の比較と同じくらい高速であると確信しています。おそらく、オブジェクトの状態に既に格納されているシングルトン オブジェクトを直接比較するだけです。しかし、あるクラスが他のクラスの親である場合はどうなるでしょうか?

私は通常、instanceof通常のクラス チェックと同じくらい高速であると考えていますが、今日考えてみると、機能するためinstanceofには「舞台裏」で何らかの反省が発生する必要があるようです。オンラインで調べたところ、誰かinstanceofが遅いと言った場所がいくつか見つかりました。おそらく、オブジェクトの親を比較するために必要なリフレクションが原因でしょうか?

これは次の質問につながります。キャストだけではどうでしょうか。何かをオブジェクトとしてキャストした場合、それは得られませんClassCastException。ただし、オブジェクトをそれ自体の親にキャストした場合、これは起こりません。基本的にinstanceof、実行時にキャストを行うときに、呼び出しまたはその効果に対するロジックを実行していますか? オブジェクトのキャストが遅くなる可能性があることをほのめかす人を聞いたことがありません。確かに、すべてのキャストが提供されたオブジェクトの親に対して行われるわけではありませんが、多くのキャスト親クラスに対して行われます。しかし、これが遅くなる可能性があることを誰もほのめかしたことはありません。

それで、それはどれですか。本当にinstanceof遅くないですか?親クラスへのキャストはどちらもinstanceof遅いですか?instanceofまたは、キャストが呼び出しよりも速く実行できる何らかの理由がありますか?

4

5 に答える 5

-2

どちらかが明らかに優れているとは思わないでしょう。

の場合instanceof、完了した作業はメモリと CPU 時間を使用します。例外使用メモリと CPU 時間も作成します。それぞれの使用量が少ないのは、よくできたベンチマークだけがその答えを与えるでしょう.

コーディングに関しては、instanceof例外をキャストして管理するよりも、a の方が望ましいと思います。

于 2013-05-01T14:35:38.087 に答える