1. ホーム

[解決済み】例外が発生しないのにtry-catchブロックを使うのは高くつく?

2022-04-13 13:14:58

質問

例外をキャッチするのはコストがかかるということは知っています。しかし、例外がスローされない場合でも、Java で try-catch ブロックを使用することはコストがかかるのでしょうか?

Stack Overflowの質問と回答がありました。 なぜtryブロックは高価なのですか? のためですが、それは .NET .

解決方法は?

try はほとんど出費がありません。を設定する作業をする代わりに try 実行時には、コードのメタデータはコンパイル時に構造化されており、例外が発生すると、スタック上を移動して try ブロックが存在し、この例外をキャッチすることができます。素人目線では try はタダ同然かもしれません。実際にコストがかかるのは例外を投げることですが、何百、何千もの例外を投げるのでなければ、そのコストに気づくことはないでしょう。


try には、いくつかの小さなコストが伴います。Java は try ブロックは、他の方法で行うことができます。しかし、Javaは例外が発生した場合、ソースコードに書かれたステートメントがある行まで順番に実行されたかのように、メソッドの実行を観察することも保証する必要があります。

なぜなら try ブロックでは、例外をスローすることができます (try ブロックの任意の行で!)。例外の中には非同期で投げられるものもあります。 stop を Thread (これは非推奨) 上で実行し、それ以外にも OutOfMemoryError はほとんどどこでも起こりうる) で、しかもそれが捕捉され、その後同じメソッドでコードが実行し続けられるとなると、できる最適化についての推論が難しくなり、起こりにくくなるのです。(誰かがコンパイラをプログラムして、最適化について説明し、正しさを保証しなければならないでしょう。しかし、実際には、このようなことに気づくことはないでしょう。