与普通方法相比,反射的性能大大下降,如果需要用反射,关闭安全检测可以使得性能大大提升。
package com.zhujieandfanshe;
import java.lang.reflect.Method;
//反射的性能分析
public class Test14 {
public static void test1(){
User user=new User();
Long startTime=System.currentTimeMillis();
for(int i=0;i<1000000000;i++){
user.getName();
}
Long endTime=System.currentTimeMillis();
System.out.println("普通方法运行时间为"+(endTime-startTime)+"ms");
}
//反射方法
public static void test2()throws Exception{
User user=new User();
//获取Class对象
Class c1=user.getClass();
//获取方法
Method method=c1.getDeclaredMethod("getName",null);
Long startTime=System.currentTimeMillis();
for(int i=0;i<1000000000;i++){
method.invoke(user,null);
}
Long endTime=System.currentTimeMillis();
System.out.println("反射方法运行时间为"+(endTime-startTime)+"ms");
}
//反射方法关闭安全检测
public static void test3()throws Exception{
User user=new User();
//获取Class对象
Class c1=user.getClass();
//获取方法
Method method=c1.getDeclaredMethod("getName",null);
method.setAccessible(true);
Long startTime=System.currentTimeMillis();
for(int i=0;i<1000000000;i++){
method.invoke(user,null);
}
Long endTime=System.currentTimeMillis();
System.out.println("反射方法关闭安全检测运行时间为"+(endTime-startTime)+"ms");
}
public static void main(String[] args) throws Exception{
//普通方法
test1();
//反射方法
test2();
//反射关闭安全检测方法
test3();
}
}
普通方法运行时间为16ms
反射方法运行时间为1125ms
反射方法关闭安全检测运行时间为766ms