爲何Exception對象創建緩慢的原因測試

看到一個帖子,爲何Exception對象創建緩慢

http://www.blogjava.net/stone2083/archive/2010/07/09/325649.html


貌似問題集中在Throwable的fillInStackTrace方法,用hprof測試一下:

java -agentlib:hprof=cpu=samples NewExceptionTester

o: 10369

e: 372768

exte: 24102

Dumping CPU usage by sampling running threads ... done.


查看dump文件,果然.....

CPU SAMPLES BEGIN (total = 16147) Thu Oct 10 21:29:45 2013

rank self accum count trace method

1 90.64% 90.64% 14636 300051 java.lang.Throwable.fillInStackTrace

2 4.61% 95.25% 744 300067 TestExceptionTime$NewException.call

3 2.22% 97.47% 358 300058 TestExceptionTime$NewExtException.call

4 0.63% 98.10% 102 300066 TestExceptionTime$NewObject.call

5 0.53% 98.63% 86 300064 java.util.HashMap.<init>

6 0.32% 98.95% 52 300069 TestExceptionTime$ExtCustomException.<init>

7 0.22% 99.17% 35 300052 TestExceptionTime$NewObject.call

8 0.18% 99.35% 29 300078 TestExceptionTime$CustomException.<init>


調用14636次?! 那將創建普通的Exception對象註銷掉,比較一下重寫fillInStackTrace方法的Exception對象的創建速度:

o: 2152

exte: 6290


看下dump文件:

CPU SAMPLES BEGIN (total = 168) Thu Oct 10 21:45:51 2013

rank self accum count trace method

1 45.83% 45.83% 77 300053 TestExceptionTime$ExtCustomException.<init>

2 36.31% 82.14% 61 300051 TestExceptionTime$NewExtException.call

3 7.14% 89.29% 12 300048 TestExceptionTime$NewObject.call

4 5.95% 95.24% 10 300055 java.lang.Long.valueOf

5 1.79% 97.02% 3 300050 TestExceptionTime$NewObject.call

果然不見了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章