JAva投げ異常と直接戻り比較
1342 ワード
異常を使ってコードをはっきりさせることができますが、投げ異常と戻り状態コードの性能の差はどのくらいですか.
暇があったら何もしないで、テストをします.
テストコードを先に
1投異常
2直接戻る
結果をそれぞれ10回実行
ダイレクトリターン
異常放出
10971157
10890656983
9833024
10809811373
12002224
10813899951
15228402
10740746030
65847475
10736142652
9674623
10735044607
8212356
11051365537
10112668
10746780876
9975290
10764845322
11647779
10846855466
最大最小消費時間の合計をそれぞれ除去する
ダイレクトリターン
異常放出
投げ異常/直接戻る
89445167
86349738653
965.3930061
暇があったら何もしないで、テストをします.
テストコードを先に
1投異常
static void f2() {
throw new RuntimeException("1");
}
public static void main(String[] args) {
long a = System.nanoTime();
for (int i = 0; i < 10000000; i++) {
try {
f2();
} catch (Exception e) {
String s=e.getMessage();
}
}
long b = System.nanoTime();
System.out.println(b-a);
}
2直接戻る
static String f1() {
return "1";
}
public static void main(String[] args) {
long a = System.nanoTime();
for (int i = 0; i < 10000000; i++) {
String s=f1();
}
long b = System.nanoTime();
System.out.println(b-a);
}
結果をそれぞれ10回実行
ダイレクトリターン
異常放出
10971157
10890656983
9833024
10809811373
12002224
10813899951
15228402
10740746030
65847475
10736142652
9674623
10735044607
8212356
11051365537
10112668
10746780876
9975290
10764845322
11647779
10846855466
最大最小消費時間の合計をそれぞれ除去する
ダイレクトリターン
異常放出
投げ異常/直接戻る
89445167
86349738653
965.3930061