1

Java知识点总结(反射-反射机制性能问题)

@(Java知识点总结)[Java, 反射]

性能相关注意点:

  1. setAccessible

    • 启用和禁用访问安全检查的开关,值为 true 则指示反射的对象在使用时应该取消 Java 语言访问检查。值为 false 则指示反射的对象应该实施 Java 语言访问检查。__并不是为true就能访问为false就不能访问__。
  • 禁止安全检查,可以提高反射的运行速度。
  • 可以考虑使用:cglib/javaassist字节码操作
  • 测试示例:

    import java.lang.reflect.Method;
    /**
     * 反射性能测试
     * @author Administrator
     *
     */
    public class Test05 {
     
      public static void test1(){
       Student student = new Student();
       
       long startTime = System.currentTimeMillis();
       for (int i = 0; i < 1000000000; i++) {
         student.setName("张三");
       }
       long endTime = System.currentTimeMillis ();
       
       System.out.printf("调用普通方法,执行1亿次,耗时%dms\n",endTime-startTime);
      }
      
      public static void test2(){
       try {
         Student student = new Student();
         
         Method m = student.getClass().getMethod("setName", String.class);
         long startTime = System.currentTimeMillis();
         for (int i = 0; i < 1000000000; i++) {
          m.invoke(student,"张三");
         }
         long endTime = System.currentTimeMillis();
         
         System.out.printf("调用反射方法,执行1亿次,耗时%dms\n",endTime-startTime);
         
       } catch (Exception e) {
         e.printStackTrace();
       }
      }
      
      public static void main(String[] args) {
       test1();  //41ms
       test2(); //1826ms
      }
    }

    苏生
    803 声望725 粉丝