質問はそれをすべて言っています。ヒットはそれほど重要ではありませんが(私はそれを1.5倍から2倍遅く測定しました)、try-catchのあるバイトコードとそれがないバイトコードに違いはありません。それで何が一般的に遅くなりますか?Java: "try-catch"ブロックに入る/使用するオーバーヘッド?
P1。問題は、例外をスローするオーバーヘッドではなく、tryブロックを出入りすることの問題であることに注意してください。
EDIT:ここ コード(ホットスポット1.6.0_31サーバー上で実行)
static void tryCatch()
{
int i = 0;
long l1 = getTime();
for(int j = 0; j < 100000; j++)
{
try
{
i++;
}
catch(Exception e)
{
}
}
long l2 = getTime();
System.out.println("with try-catch: " + (l2 - l1) + ": " + i);
}
static void noTryCatch()
{
int i = 0;
long l1 = getTime();
for(int j = 0; j < 100000; j++)
{
i++;
}
long l2 = getTime();
System.out.println("w/o try-catch: " + (l2 - l1) + ": " + i);
}
static long getTime()
{
return System.nanoTime();
}
EDIT2です:あなたはマイクロベンチマークを持っているのでhttp://jsperf.com/try-catch-overhead
これをどのように測定したかを示してください。ベンチマークは正しく理解するのが難しいことが知られています。 –
また、try-catchはバイトコードで表現されるだけでなく、メソッドのコード属性でも表現されます。言い換えれば、try-catch実装の* part *のみがバイトコードで参照されます。 –
ここに、あなたが求める答えがあると思われる質問があります。これが重複した質問であると考えられるかどうかわからない:http://stackoverflow.com/questions/2633834/should-java-try-blocks-be-scoped-as-tightly-as-possible – bezmax