効果的なJavaの例外の章から:
try-catchブロック内にコードを配置すると、最新のJVM実装が実行する可能性のある特定の最適化が禁止されます。
try-catchブロックがJVMによる最適化を妨げる理由と方法は?
効果的なJavaの例外の章から:
try-catchブロック内にコードを配置すると、最新のJVM実装が実行する可能性のある特定の最適化が禁止されます。
try-catchブロックがJVMによる最適化を妨げる理由と方法は?
JVMは、try/catchブロック内の操作をtry/catchブロック外の操作と組み合わせたり並べ替えたりしない場合があります。複雑さのすべての層は最適化を難しくします。比較的まれなケースである場合、JVMによって処理されない可能性があります。JVMは、疑わしい場合は、最適なコードではなく正確さを選択します。
「理由」の1つは、例外と例外処理が例外的であると見なされることです。つまり、めったに実行されないコード。したがって、例外ハンドラーの最適化にJITコンパイラーが費やす時間は、全体的なパフォーマンスにほとんど影響を与えません。
JITコンパイラのオプティマイザは、最適化のコストに対して効果的な最適化のパフォーマンス上の利点のバランスをとる必要があります。後者には次のものが含まれます。
例外ハンドラの最適化を妨げる技術的な理由もあるかもしれません。たとえば、オプティマイザが制御の流れが「どこから来たのか」を把握するのは簡単ではない(または不可能でさえある)場合があります。したがって、それを知っていることに基づく最適化(たとえば、レジスターへのキャッシュ、共通部分式の引き上げなど)は実行できません。
次のリンクを確認してください。
例外はJavaオブジェクトであり、これらのオブジェクトを作成する必要があると思います。オブジェクトの作成はコストのかかる操作です。したがって、例外はエラーの処理にのみ使用し、フローを制御するためには使用しないでください。