java反射

 

收藏

http://www.blogjava.net/jiadong/archive/2007/08/27/139945.html

1 进行了一个反射小实验

public class MyObject {
 private String nameString = "adsfasdfasdf";

 public void printlns(int n) {
  for (int i = 0; i < n; i++) {
   nameString = String.valueOf(i);
  }
 }
}

经过实验,得出如下数据:

构建对象1000万次 new消耗219mm;java.lang.Class.forName(String).newInstance()  消耗25938mm;net.sf.cglib.reflect.FastClass.create(Class).newInstance()消耗16156mm

调用printlns1000万次  new构造对象直接调用消耗51672mm;java.lang.Class.forName(String).newInstance()  构造出对象直接调用 消耗51765mm(和正常调用无区别);net.sf.cglib.reflect.FastClass.newInstance()构造对象,直接调用消耗56187(和普通java没区别);java.lang.Class.getMethod(String, Class<?>...).invoke()消耗70641mm ;net.sf.cglib.reflect.FastMethod.invoke(Object, Object[])消耗51547mm(和正常调用无区别) ,因为cglib生成一个代理类,将反射调用转化为直接调用。

使用反射的好处就是可以在运行时刻决定调用的类和调用的方法,把类、方法、方法参数都给参数化了。通过以上的实验数据,可以初步判定要用反射动态构造对象的话,可以使用net.sf.cglib.reflect.FastClass.create(Class).newInstance()(它和jdk反射构建对象的小区别是jdk可以传字符串表示一个类,而cglib需要传递Class作为参数),要用反射动态调用方法可以使用net.sf.cglib.reflect.FastMethod.invoke(Object, Object[])

类似的实验,对cglib的反射原理进行剖析。

http://www.360doc.com/content/11/0315/11/322271_101272974.shtml

 

 

你可能感兴趣的:(java,反射,cglib)