本來是由于某個問題想用反射來解決,使用前作個小測試(我的應用都是用JDK1.4.2)。然后順便把1.5的也測了。看到這個數據,不禁想到Hibernate,Spring這類依賴反射的框架是否更加適合運行在JDK1.4平臺上。
補:后來在1.6上測了測,性能提高了不少,1.6真的是值得期待
Java 1.5
Reflection?|?Normal
3685|210
3696|210
4086|211
3685|211
3775|210
3696|210
Java 1.4.2Reflection?|?Normal
3295|340
3325|370
3295|340
3315|350
3305|340
3285|330
Java 1.6 beta2
Reflection?|?Normal
2954|200
2644|581
3005|170
2944|190
2684|170
3014|191

測試代碼
?1?import?java.lang.reflect.*;
?2?
?3?class?ReflectTest?{
?4?
?5????public?static?void?main(String[]?args)?{
?6???????String?firstWord?=?"Hello?";
?7???????String?secondWord?=?"everybody.";
?8?
?9???????for?(int?i=0;?i<100000;?i++)?{
10?????????????String?bothWords?=?append2(firstWord,?secondWord);
11???????}
12???????for?(int?i=0;?i<100000;?i++)?{
13?????????????String?bothWords?=?append(firstWord,?secondWord);
14???????}
15?
16?????????long?begin?=?System.currentTimeMillis();
17???????for?(int?i=0;?i<1000000;?i++)?{
18?????????????String?bothWords?=?append(firstWord,?secondWord);
19???????}
20???????System.out.println("Reflection:"?+?(System.currentTimeMillis()?-?begin));
21?
22?????????begin?=?System.currentTimeMillis();
23???????for?(int?i=0;?i<1000000;?i++)?{
24?????????????String?bothWords?=?append2(firstWord,?secondWord);
25???????}
26???????System.out.println("Normal:"?+?(System.currentTimeMillis()?-?begin));
27?
28????}
29?
30????public?static?String?append(String?firstWord,?String?secondWord)?{
31???????String?result?=?null;
32???????Class?c?=?String.class;
33???????Class[]?parameterTypes?=?new?Class[]?{String.class};
34???????Method?concatMethod;
35???????Object[]?arguments?=?new?Object[]?{secondWord};
36???????try?{
37?????????concatMethod?=?c.getMethod("concat",?parameterTypes);
38?????????result?=?(String)?concatMethod.invoke(firstWord,?arguments);
39???????}?
40???????catch?(NoSuchMethodException?e)?{
41???????????System.out.println(e);
42???????}?
43???????catch?(IllegalAccessException?e)?{
44???????????System.out.println(e);
45???????}?
46???????catch?(InvocationTargetException?e)?{
47???????????System.out.println(e);
48???????}
49???????return?result;
50????}
51?
52?????public?static?String?append2(String?firstWord,?String?secondWord)?{
53???????return?firstWord.concat(secondWord);
54????}
55?}