5

効果的なJavaの例外の章から:

try-catchブロック内にコードを配置すると、最新のJVM実装が実行する可能性のある特定の最適化が禁止されます。

try-catchブロックがJVMによる最適化を妨げる理由方法は?

4

3 に答える 3

5

JVMは、try/catchブロック内の操作をtry/catchブロック外の操作と組み合わせたり並べ替えたりしない場合があります。複雑さのすべての層は最適化を難しくします。比較的まれなケースである場合、JVMによって処理されない可能性があります。JVMは、疑わしい場合は、最適なコードではなく正確さを選択します。

于 2012-07-19T09:32:27.673 に答える
2

「理由」の1つは、例外と例外処理が例外的であると見なされることです。つまり、めったに実行されないコード。したがって、例外ハンドラーの最適化にJITコンパイラーが費やす時間は、全体的なパフォーマンスにほとんど影響を与えません。

JITコンパイラのオプティマイザは、最適化のコストに対して効果的な最適化のパフォーマンス上の利点のバランスをとる必要があります。後者には次のものが含まれます。

  • 複雑な前提条件をチェックして最適化が可能かどうかを確認するコスト、
  • 実際の最適化を行うためのコスト、および
  • (通常の条件/仮定の下で)効果的ではない最適化を行う複雑なソフトウェアを実装および保守するための(Oracleにとっての)コスト。

例外ハンドラの最適化を妨げる技術的な理由もあるかもしれません。たとえば、オプティマイザが制御の流れが「どこから来たのか」を把握するのは簡単ではない(または不可能でさえある)場合があります。したがって、それを知っていることに基づく最適化(たとえば、レジ​​スターへのキャッシュ、共通部分式の引き上げなど)は実行できません。

于 2012-07-19T11:49:45.107 に答える
-1

次のリンクを確認してください。

Javaの例外はどれくらい遅いですか?

例外はJavaオブジェクトであり、これらのオブジェクトを作成する必要があると思います。オブジェクトの作成はコストのかかる操作です。したがって、例外はエラーの処理にのみ使用し、フローを制御するためには使用しないでください。

于 2012-07-19T10:00:02.787 に答える