????Java????Ч???????Σ???????????????????????.?????ο?.
???????????:
????1. ?????Bean(int??Integer??String)??set????
????2. loop 1???
????3. ????????????????????????????????????????????????set????????
??????????:

?????ó???????????:
????1.JDK????Ч??????????????????????????20??
????2.???set??????????????? = 4633ms / 1?? / 3?? = 0.0154us
????3.Cglib??fastmethod???????????
?????????????????????????????Щ?????????????????????????£?
??????????
??????????
???????????????????????
???????reflectasm?????
long now;
long sum = 0;
TestClass t = new TestClass();
now = System.currentTimeMillis();
for(int i = 0; i<500000; ++i){
t.setNum(i);
sum += t.getNum();
}
System.out.println("get-set???"+(System.currentTimeMillis() - now) + "ms??????" +sum);
sum = 0;
now = System.currentTimeMillis();
for(int i = 0; i<500000; ++i){
Class<?> c =Class.forName("test.TestClass");
Class<?>[] argsType = newClass[1];
argsType[0] = int.class;
Method m =c.getMethod("setNum"?? argsType);
m.invoke(t?? i);
sum += t.getNum();
}
System.out.println("?????????"+(System.currentTimeMillis()- now) + "ms??????" +sum);
sum = 0;
Class<?> c = Class.forName("test.TestClass");
Class<?>[] argsType = new Class[1];
argsType[0] = int.class;
Method m = c.getMethod("setNum"?? argsType);
now = System.currentTimeMillis();
for(int i = 0; i<500000; ++i){
m.invoke(t?? i);
sum += t.getNum();
}
System.out.println("???淴????"+(System.currentTimeMillis()- now) + "ms??????" +sum);
sum = 0;
MethodAccess ma = MethodAccess.get(TestClass.class);
int index = ma.getIndex("setNum");
now = System.currentTimeMillis();
for(int i = 0; i<500000; ++i){
ma.invoke(t?? index?? i);
sum += t.getNum();
}
System.out.println("reflectasm??????"+(System.currentTimeMillis() - now) + "ms??????" +sum);
????????????
????get-set???6ms??
?????????????1838ms
???????淴????70ms
????reflectasm??????20ms
?????????????????????????????????JDK7???????????????JDK6??40??????10???????reflectasm invoke??Ч???java???invoke????????????????4?????Ч??????????á?