1. ホーム
  2. java

[解決済み] Javaでinstanceofを使用することによるパフォーマンスへの影響

2022-03-17 09:57:16

質問

あるアプリケーションを制作しているのですが、あるデザインアプローチでは instanceof 演算子を使用します。OO設計では一般的に instanceof というのは別の話で、この質問は純粋にパフォーマンスに関するものです。パフォーマンスへの影響はあるのでしょうか?と同じように速いのでしょうか? == ?

例えば、ある基本クラスと10のサブクラスがあるとします。ベースクラスを受け取る1つの関数で、そのクラスがサブクラスのインスタンスであるかどうかをチェックし、いくつかのルーチンを実行します。

この問題を解決するために私が考えた他の方法のひとつは、quot;type id"という整数プリミティブを代わりに使い、サブクラスのカテゴリをビットマスクで表現し、サブクラスのquot;type id"とカテゴリを表す定数マスクとのビットマスク比較のみを行うことでした。

instanceof それよりも速くなるように、JVMによって何らかの最適化が行われているのでしょうか?私はJavaにこだわりたいのですが、アプリのパフォーマンスは重要です。この道を歩んだことのある人が何かアドバイスしてくれるとうれしいです。私は、最適化するために間違ったことに焦点を当てたり、あまりに細かいことを言うでしょうか?

解決方法は?

最近のJVM/JITコンパイラは、instanceof、例外処理、リフレクションなど、伝統的に"slow"な操作のほとんどについて、パフォーマンスへの打撃を除去しています。

Donald Knuthが書いたように、"97%程度の小さな効率は忘れるべきだ。早まった最適化は諸悪の根源だ。" instanceofのパフォーマンスはおそらく問題にならないだろうから、それが問題だと確信するまでは、エキゾチックな回避策を考えて時間を無駄にしないことだ。