由于Java反射是要解析字节码,将内存中的对象进行解析,包括了一些动态类型,而JVM无法对这些代码进行优化。因此,反射操作的效率要比那些非反射操作低得多!
做一个简单的测试感受一下反射的效率。
反射机制的效率测试
public class Test {
public static void main(String[] args){
try{
//反射机制
Class clazz = Class.forName("com.test.Users");
Users users = (Users)clazz.getConstructor(null).newInstance();
long reflectStart = System.currentTimeMillis();
Method method = clazz.getMethod("setUsername",String.class);
for(int i=0;i<100000000;i++){
method.invoke(users,"admin");
}
long reflectEnd = System.currentTimeMillis();
//非反射方式的耗时
long start = System.currentTimeMillis();
Users u = new Users();
for(int i=0;i<100000000;i++){
u.setUsername("admin");
}
long end = System.currentTimeMillis();
System.out.println("反射执行时间:"+(reflectEnd - reflectStart));
System.out.println("普通方式执行时间:"+(end - start));
}catch(Exception e){
e.printStackTrace();
}
}
}