throw Exceptionの実行効率試験
3681 ワード
現在メンテナンスされているプロジェクトをExceptionでエラーを処理するよう説得するために、異常効率なデータを作成します.ああ......テストコード
試験機器: cpu:CeleronM CPU [email protected] GHz(私の可哀想な機械・・・)
メモリ:2 GBテスト結果:(時間:ミリ秒)
BODY { FONT-FAMILY:Tahoma; FONT-SIZE:10pt } P { FONT-FAMILY:Tahoma; FONT-SIZE:10pt } DIV { FONT-FAMILY:Tahoma; FONT-SIZE:10pt } TD { FONT-FAMILY:Tahoma; FONT-SIZE:10pt }
100000サイクルテスト異常スタック深さ:13異常あり:2766なし:47異常あり:2890なし:47異常あり:2719なし:47異常あり:2718なし:47異常あり:2688なし:47異常あり:2718なし:47異常あり:2718なし:47異常あり:2703なし:32異常あり:2672なし:63異常あり:2703なし:47異常あり:2703なし:31
100000サイクルテスト異常スタック深さ:23異常あり:3688なし:94異常あり:3593なし:94異常あり:3625なし:94異常あり:3625なし:94異常あり:3625なし:78異常あり:3922なし:94異常あり:5625なし:437異常あり:8469なし:94異常あり:4390なし:94異常あり:3594なし:109異常あり:3610なし:93
100000サイクルテスト異常スタック深さ:33異常あり:5328なし:141異常あり:5109なし:125異常あり:5109なし:157異常あり:5093なし:141異常あり:12563なし:125異常あり:5125なし:125異常あり:5218なし:125異常あり:5172なし:141異常あり:5125なし:140異常あり:5204なし:125
100000サイクルテスト異常スタック深さ:53異常あり:6172なし:234異常あり:6063なし:219異常あり:6031なし:234異常あり:6094なし:234異常あり:6078なし:219異常あり:6047なし:219異常あり:6062なし:235異常あり:6031なし:250異常あり:6156なし:235異常あり:6062なし:234
結果分析:スタック深さは速度に大きな影響を及ぼし,実質的に線形成長を示した. 13層のスタック深さの場合、約2.7秒かかり、異常毎に2.7微妙に換算され、普通の機械は毎秒37万回異常を放出することができる.
異常な効率は私が以前想像していたよりも高い.
/**
*
* @throws Exception
*/
@Test
public void testThrowEfficiency() throws Exception {
long times = 1000000;
long startTime;
System.out.println(times + " ");
try {
recursion(0, true);
}
catch (Exception e) {
System.out.println(" :" + e.getStackTrace().length);
}
for(int count = 0; count < 10; count++) {
startTime = System.currentTimeMillis();
for (int i = 0; i < times; i++) {
try {
recursion(0, true);
}
catch (Exception e) {
}
}
System.out.println(" :" + (System.currentTimeMillis() - startTime));
startTime = System.currentTimeMillis();
for (int i = 0; i < times; i++) {
try {
recursion(0, false);
}
catch (Exception e) {
}
}
System.out.println(" :" + (System.currentTimeMillis() - startTime));
}
}
private void recursion(int count, boolean isThrow) {
if(count == 10) {
if(isThrow) {
throw new IllegalStateException("");
}
return;
}
recursion(count+1, isThrow);
}
public static void main(String[] args) throws Exception {
Test test = new MakeKeyNoTest();
test.testThrowEfficiency();
}
メモリ:2 GB
BODY { FONT-FAMILY:Tahoma; FONT-SIZE:10pt } P { FONT-FAMILY:Tahoma; FONT-SIZE:10pt } DIV { FONT-FAMILY:Tahoma; FONT-SIZE:10pt } TD { FONT-FAMILY:Tahoma; FONT-SIZE:10pt }
100000サイクルテスト異常スタック深さ:13異常あり:2766なし:47異常あり:2890なし:47異常あり:2719なし:47異常あり:2718なし:47異常あり:2688なし:47異常あり:2718なし:47異常あり:2718なし:47異常あり:2703なし:32異常あり:2672なし:63異常あり:2703なし:47異常あり:2703なし:31
100000サイクルテスト異常スタック深さ:23異常あり:3688なし:94異常あり:3593なし:94異常あり:3625なし:94異常あり:3625なし:94異常あり:3625なし:78異常あり:3922なし:94異常あり:5625なし:437異常あり:8469なし:94異常あり:4390なし:94異常あり:3594なし:109異常あり:3610なし:93
100000サイクルテスト異常スタック深さ:33異常あり:5328なし:141異常あり:5109なし:125異常あり:5109なし:157異常あり:5093なし:141異常あり:12563なし:125異常あり:5125なし:125異常あり:5218なし:125異常あり:5172なし:141異常あり:5125なし:140異常あり:5204なし:125
100000サイクルテスト異常スタック深さ:53異常あり:6172なし:234異常あり:6063なし:219異常あり:6031なし:234異常あり:6094なし:234異常あり:6078なし:219異常あり:6047なし:219異常あり:6062なし:235異常あり:6031なし:250異常あり:6156なし:235異常あり:6062なし:234
結果分析:
異常な効率は私が以前想像していたよりも高い.