「アプリでテストする」ことが必須であることは知っています。とはいえ、分析的な洞察も求めたいと思います。
Array
要素が順次処理されるアプリ内命令キューを (として) 持っています。詳細は関係ありません。(「命令」を仮想命令と考えてください。つまり、小さな内部仮想マシンのように、アプリケーションの観点からのみ解釈されます)。
実際の問題は、キュー要素を処理するのにどちらが高速かということです。Java によって提供される仮想ディスパッチとswitch-case
?
最初のケースでは、
Array
は独自のオブジェクトの子孫で構成されていOperation
ます (または、単純にRunnable
-- 要点がわかります)。この場合、命令の実行はOperation.run()
オブジェクトのオーバーライドを呼び出すだけです。仮想ディスパッチが残りを行いrun()
ます。具体的なインスタンスの が呼び出されます。は
Array
プリミティブ配列で、各要素は連続した範囲 (たとえば、 0..65535int
の間) からの命令コードです。int
命令処理とは、(A)switch-case
ステートメントを介して、または (B)命令コードによって直接インデックス付けされたArray
(オブジェクトの) を使用して、命令コードが解釈されることを意味します。Operation
2 番目のケースでは、switch-case
最近では十分に最適化されていると思います (特に、連続した範囲を使用しているため)。そのため、Array
オプションを忘れることができます。
結論から言うと、どちらが速いですか?の分岐に解釈コードを追加するswitch-case
か、仮想ディスパッチを使用しますか?
私はそれがこれに分解すると思います:switch-case
より速いですか、それとも仮想ディスパッチですか? a は分岐テーブルまたはジャンプ命令に最適化できると読みましたswitch-case
が、この場合は可能になると思います。