Windows system >> Windowsの知識 >  >> Windowsチュートリアル合成 >> 窓について >> JAVA例外はパフォーマンスに影響を及ぼしますか?

JAVA例外はパフォーマンスに影響を及ぼしますか?

  

OneAPMのお客様にテクニカルサポートを提供する際、お客様が気付いていない多くの例外が発生します。これらの異常を排除した後、コードは以前よりはるかに速い速度で実行されます。これにより、コード内で例外を使用するとパフォーマンスに大きなオーバーヘッドが生じる可能性があると推測できます。例外はエラー処理の重要な部分であるため、それらを破棄することはできませんので、例外処理がパフォーマンスに与える影響を測定する必要があります。

実験

私の実験は、ランダムに例外をスローする単純なコードに基づいています。科学的な観点からは、これは完全に正確な測定ではありません。また、HotSpotコンパイラが実行中のコードに対して何をするのか私にはわかりません。しかしとにかく、このコードは私たちにいくつかの基本的な情報を与えるべきです。



結果は非常に興味深いものです。例外のスローとキャッチのコストは非常に低いようです。私の場合は、例外ごとに約0.02ミリ秒です。あなたが本当にあまりにも多くの例外を投げない限り(私たちは10万回以上を意味します)、これは基本的に無視できます。これらの結果は、例外処理自体がコードのパフォーマンスに影響を与えないことを示していますが、次の問題を解決することはできません。例外がパフォーマンスに与える大きな影響の原因は誰ですか?

重要な問題をいくつか見逃していました。

少し考え直すと、例外処理の重要な部分を見逃していることがわかりました。例外が発生したときにあなたがしたことについては考えませんでした。ほとんどの場合、例外をキャッチするだけではありません。そして問題はここにあります:一般的に、あなたは問題を補うことを試みるでしょう、そしてアプリケーションがまだエンドユーザーで機能するようにしよう。それで、私が逃したのは、''例外''を処理するために実行された補足コードです。補足コードによっては、パフォーマンスの低下が非常に大きくなる可能性があります。場合によっては、これはサーバーへの接続を再試行することを意味する場合もあれば、デフォルトのロールバックスキームを使用することを意味する場合もあり、このスキームによって提供されるソリューションは間違いなく非常に低いパフォーマンスをもたらします。これは、多くの場合に見られる動作についての良い説明を与えるようです。

でも、ここで分析しても問題ないと思いますが、他に何か不足していると思います。

スタックトレース

ストラトトレースを収集する際の状況のパフォーマンスを監視しながら、この問題についてはまだ興味がありません。

よく起こる状況は次のようなものです。例外とそのスタックの軌道を書き留めて、問題がどこにあるのかを見つけようとする。

このためにコードを修正し、さらに例外コードトレースを収集しました。これは状況を劇的に変えます。異常なストラックトレースの収集は、単に例外を捕捉してスローするよりも10倍高いパフォーマンスへの影響を持ちます。そのため、strackトレースはどこで問題が発生したのかを理解するのに役立ちます(そして問題が発生した理由を理解するのに役立つかもしれません)が、パフォーマンス上のペナルティがあります。私たちは痕跡について話していないので、ここでの影響はしばしば非常に大きいです。ほとんどの場合、複数のレベルで例外をスローしてキャッチします。簡単な例を見てみましょう:Webサービスクライアントがサーバーに接続します。まず、Javaライブラリレベルでの接続失敗例外があります。その後、フレームワークレベルでクライアント失敗例外が発生し、その後アプリケーションレベルでビジネスロジック呼び出し失敗例外が発生する可能性があります。これまでに、合計3本のストラップトレースが収集されています。ほとんどの場合、ログファイルまたはアプリケーション出力からこれらのストラックトレースを見ることができます。また、これらの長いストラックトレースを書くとパフォーマンスにも影響があります。

まとめ

まず、パフォーマンスへの影響があるため、異常を放棄することはお勧めできません。例外は実行時の問題を解決するための一貫した方法を提供し、クリーンなコードを書くのに役立ちます。ただし、コードにスローされた例外の数を追跡する必要があります。これは、パフォーマンスに大きな影響を与える可能性があります。そのため、OneAPMはデフォルトでスローされる例外を追跡します - 多くの場合、人々はコードで発生する例外とそれらの例外を解決する際のパフォーマンスのペナルティに驚くでしょう。第二に、例外を使用することは有用ですが、あまりにも多くのストラップトレースをキャッチすることは避けるべきです。例外は、異常な状況に合わせて設計され、それらを使用するときには留意する必要があります。もちろん、良いプログラミング習慣を守りたくない場合は、Java言語を使用すると、プログラムの実行速度が上がり、それを推奨します。
zh-CN"],null,[1],zh-TW"]]]

Copyright © Windowsの知識 All Rights Reserved