反射效率问题

来源:互联网 发布:laravel nginx rewrite 编辑:程序博客网 时间:2024/06/03 13:18

 

反射带来了编程的灵活性,但是他的执行效率相比于常规调用要低。(禁用安全检查可以稍微缓解)

所以最好是在必须得用反射的情况下再用反射。

 

以如下代码为例,通过两种方式调用某个方法1000000000L

privatestaticvoid test1(){

      User u=new User();

      longstartTime=System.currentTimeMillis();

      for(inti=0;i<1000000000L;i++)

             u.getName();

      longendTime=System.currentTimeMillis();

      System.out.println("普通调用方式耗时:"+(endTime-startTime)+"ms");

      

}

 

privatestaticvoid test2()throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{

      User u=new User();

      longstartTime=System.currentTimeMillis();

      

      Class<? extends User>class1 =u.getClass();

      Method declaredMethod =class1.getDeclaredMethod("getName",null);

      declaredMethod.setAccessible(false);

      

      for(inti=0;i<1000000000L;i++){

             declaredMethod.invoke(u,null);

      }

             

      longendTime=System.currentTimeMillis();

      System.out.println("反射调用方式(禁用安全检查)耗时:"+(endTime-startTime)+"ms");

      

}

 

privatestaticvoid test3()throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{

      User u=new User();

      longstartTime=System.currentTimeMillis();

      

      Class<? extends User>class1 =u.getClass();

      Method declaredMethod =class1.getDeclaredMethod("getName",null);

      

      for(inti=0;i<1000000000L;i++){

             declaredMethod.invoke(u,null);

      }

             

      longendTime=System.currentTimeMillis();

      System.out.println("反射调用方式耗时:"+(endTime-startTime)+"ms");

      

}


 

 

原创粉丝点击