提高反射效率

Posted qiaoxin11

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了提高反射效率相关的知识,希望对你有一定的参考价值。

反射机制对程序的运行在性能上有一定的影响,速度慢

一、 如何提高反射的性能

1) 通过 setAccessible 提高性能

a) setAccessible 启用和禁用访问安全检查的开关,值为 true 则指示反射的对象在使用时应该取消 Java 语言访 问检查,值为 false 则指示反射的对象不实施 Java 语言 访问检查,并不是为 true 就能访问为 false 就不能访问

b) 禁止安全检查,可以提高反射的运行速度

 1 public class Test3 {
 2     public static void test01(){
 3         //User u=new User();
 4         Object obj=new Object();
 5         long startTime=System.currentTimeMillis();
 6         for(int i=0;i<1000000000L;i++){
 7             obj.hashCode();
 8         }
 9         long endTime=System.currentTimeMillis();
10         System.out.println("调用普通方法,执行10亿次:"+(endTime-startTime)+"ms");
11     }
12     public static void test02() throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{
13         Object obj=new Object();
14         Class c=obj.getClass();
15         //获取指定的方法
16         Method m=c.getDeclaredMethod("hashCode", null);
17         long startTime=System.currentTimeMillis();
18         for(int i=0;i<1000000000L;i++){
19             //执行这个方法
20             m.invoke(obj, null);
21         }
22         long endTime=System.currentTimeMillis();
23         System.out.println("通过反射动态方法调用,执行10亿次:"+(endTime-startTime)+"ms");
24     }
25     public static void test03() throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{
26         Object obj=new Object();
27         Class c=obj.getClass();
28         //获取指定的方法
29         Method m=c.getDeclaredMethod("hashCode", null);
30 
31         m.setAccessible(true);//不执行安全检查
32 
33         long startTime=System.currentTimeMillis();
34         for(int i=0;i<1000000000L;i++){
35             //执行这个方法
36             m.invoke(obj, null);
37         }
38         long endTime=System.currentTimeMillis();
39         System.out.println("通过反射动态方法调用,不启用安全检查,执行10亿次:"+(endTime-startTime)+"ms");
40     }
41     public static void main(String[] args) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
42         test01();
43         test02();
44         test03();
45     }
46 }

技术图片

 

以上是关于提高反射效率的主要内容,如果未能解决你的问题,请参考以下文章

提高反射效率

vscode自定义Tab填充提高代码编写效率

一些减少代码量提高开发效率的利器(Java)

java 反射代码片段

webstorm代码片段的创建

获取类运行