メッセージをチェックするのではなく、例外をキャッチするときにtry-catchがどれくらい時間がかかりますか(メッセージには検索のためのHashMapタイプのパフォーマンスがあると仮定します)。キャッチパフォーマンスを試してくださいJava
if (message.contains(MessageField.TIMESTAMP))
timestamp = message.getLongField(MessageField.TIMESTAMP);
メッセージをチェックするのではなく、例外をキャッチするときにtry-catchがどれくらい時間がかかりますか(メッセージには検索のためのHashMapタイプのパフォーマンスがあると仮定します)。キャッチパフォーマンスを試してくださいJava
if (message.contains(MessageField.TIMESTAMP))
timestamp = message.getLongField(MessageField.TIMESTAMP);
簡潔には、チェックはの方法です。小切手は以下の理由でご利用ください:
状況によっては、例外が最適化される可能性があるため、すべてのケースで必ずしも遅くなるとは限りません。 –
+1:スタックトレースは使用されるまで完全には作成されません(ほとんどの例外は不要です)。同じ例外はすべて高価なものではなく、例外的な条件でなければなりません。 –
@PeterLawreyありがとう - 使用するまでスタックトレースが作成されていないことはわかりませんでした – Bohemian
対
try {
timestamp = message.getLongField(MessageField.TIMESTAMP);
} catch (MissingDataException e) {
//Not all messages contain this field
}
答えは "はるかに長い" です。例外は、スタックトレースを作成するためのチェックに比べて遅いです。
一般的な点として、プログラムの流れを制御するための例外を使用すると、コードが複雑になるので、悪い考えです。常に例外的なことが起こった場合には、チェックを行い、例外を残してください。
これを数量化したいと思います... –
場合によっては、例外が最適化される可能性があるため、すべてのケースで必ずしも遅くなるとは限りません。 –
をそれを扱う 『誰が気に!』 。それは間違っています!いずれの場合においても
は、あなたがベンチマークにそれをしたい場合は、https://github.com/google/caliper
がこれを定量化したい使用して...
一般的に定量化するために文字通り不可能です。ナノ秒ではありません...実行プラットフォームに依存するためです。そしてパーセンテージでさえそうではありません。
時間はスタックトレースをキャプチャするのにかかる時間に大きく左右されます。は、例外がスローされたときのスタックの深さによって異なります。これは、通常の条件文ではなくJava例外を使用することが、本当に悪い考えである理由の1つに過ぎません。
しかし、フリップ側は、それが特定のポイントで投げスタックトレースと例外が決してになるだろうされていないと判断することができるという例外関連のコードがを重く最適化提供するJITコンパイラの範囲があるということです中古。
実際にいくつかの(IMO、無意味でほとんど無意味な)番号が必要な場合は、独自のベンチマークを行う必要があります。がんばろう。
これは、JVM、基盤となるハードウェアなどのさまざまな基盤を変えようとしています。自分で測定してみましたか? – Sean
それは例外的な状況ですか?それをエラーとして記録する必要がありますか?このコードはループで実行されますか? –
重複:http://stackoverflow.com/questions/4280831/java-try-catch-performance-is-it-recommended-to-keep-what-is-inside-the-try-cla&http:// stackoverflow.com/questions/5158665/java-try-catch-blocks –