回答:
しばらくの間、Stack Overflowに向かいましょう-Java例外はどれくらい遅いですか?
例外をスローすることの高価な部分は、例外に伴うスタックトレースの生成であることがわかります。
このスタックトレースは、問題をデバッグするときに、どこから呼び出されているのかを把握するのに非常に役立ちます。問題について尋ねられる標準的な質問の1つは、「コードとは」と「スタックトレースとは」です。これらの2つのことがなければ、問題の診断はほとんど不可能です。
ただし、すべての例外が問題によって生成されるわけではありません。それらのいくつか、あなたはほとんど期待しています。
何らかのソースから文字列を取得し、それをInteger.decodeで整数形式に戻したい状況を考えてください。
Integer foo = Integer.decode(str);
しかし、それdecode
はチェックをスローしますNumberFormatException
。OK...
Integer foo;
try {
foo = Integer.decode(str);
} catch (NumberFromatException e) {
// raise an error back to the input form
}
しかし、あなたは本当にスタックトレースを気にしません...しかし、そこにあります。また、スタックトレースが読み込まれるため、少し遅くなります。
したがって、Scalaには次のものがありNoStackTrace
ます。
効率上の理由から、スタックトレースを満たさない例外の特性。スタックトレースの抑制は、scala.sys.SystemPropertiesのシステムプロパティラッパーを介してグローバルに無効にできます。
不要なものを入力しないでください。スタックトレースはその場で処理するため、気にしません。これは見過ごされているものではなく、例外的でもありません。
あなたが何を扱っているかを知っているとき、それを使用することは悪い習慣ではありません。ただし、これをチェーンで渡す場合は、使用しないでください。例外が発生した場所をログに記録するだけでよい場合があります。