私の新しい仕事のために、私はJavaで多くの仕事をしており、今は細部に取り組んでいます。明らかに、Java コードはある程度例外に関するものです。私は考えていた:
呼び出しスタックは、try-catch ブロックのパフォーマンスに大きな影響を与えますか? つまり、関数を呼び出す関数を試してみるのを避ける必要があります...そして深くなりすぎますか?
try-catch ブロックは例外時のパフォーマンスにのみ影響することを読みました。しかし、それらが泡立つことは問題ですか?
私の新しい仕事のために、私はJavaで多くの仕事をしており、今は細部に取り組んでいます。明らかに、Java コードはある程度例外に関するものです。私は考えていた:
呼び出しスタックは、try-catch ブロックのパフォーマンスに大きな影響を与えますか? つまり、関数を呼び出す関数を試してみるのを避ける必要があります...そして深くなりすぎますか?
try-catch ブロックは例外時のパフォーマンスにのみ影響することを読みました。しかし、それらが泡立つことは問題ですか?
例外は高価です。使用すると、スタック トレースが作成されます。例外を確認できる場合は、そうしてください。フロー制御にtry..catchを使用しないでください。チェック/検証できない場合は、try..catchを使用してください。例は、IO 操作を行うことです。
多くの try..catch ブロックを含むコードを見ると、すぐに「これは悪い設計だ!」と思います。
1.- 呼び出しスタックの深さについて心配する必要はありません。Java Just In Time Compiler は、メソッドのインライン化などのコードの最適化を行い、コードで最高のパフォーマンスを提供します。
2.- キャッチ ブロックはパフォーマンスに影響を与えます。これは、例外をキャッチすると、例外テーブルの通過、スタックの巻き戻し、一般的なトラップ (JIT の最適化されたコードの最適化解除) など、JVM 内のいくつかの異なる操作を意味する可能性があるためです。
3.- アドバイスとして、コードをカプセル化して、巨大なスタックの深さにつながるいくつかのメソッド呼び出しで終わることを心配しないでください。JVM は、アプリケーションがコンパイルされ、実行中は常にコードの読みやすさと優れた設計パターンを目指してください。これにより、コードの保守が容易になり、パフォーマンスの修正が必要になった場合に変更が容易になります。また、catch ブロックについては、それが必要かどうかを評価しますスローまたはキャッチされた例外。キャッチしている場合は、最も一般的な例外をキャッチしてみてください。これにより、巨大な例外テーブルを回避できます。
スタック トレースは、.printStackTrace または .getStackTrace を呼び出すまで読み込まれません。catch ブロックの先頭にブレークポイントを配置すると、Exception オブジェクトのスタック トレースが null であることがわかります。