java反射优化
来源:互联网 发布:石家庄网络教育 编辑:程序博客网 时间:2024/06/15 11:23
由于反射涉及动态解析的类型,某些Java虚拟机的优化不能被执行,所以导致了一定的性能的问题,特别是在JDK6以前特别严重,有时甚至达到数百倍,但是在JDK6以后,据说性能差别就不是哪么大了,JDK对此做了优化。但是总还是有那么数10倍的性能差异,那我们就让他跑得再快点吧。
我们通常情况下写反射都是这样写:
SomeObject someObject = new SomeObject();Class<? extends SomeObject> cls = SomeObject.class;Method method = cls.getDeclaredMethod("someGetMethod");String xxx = (String) method.invoke(someObject);
这种写法从功能上来说是不会有问题的,但是从性能上来说,却是使用反射性能最差的一种方式了,每次都需要做访问检查,这个是比较消耗性能的,如果把访问检查,有人测试过,性能一下子从原来的300倍差异,降低到了只有数10倍差异:
SomeObject someObject = new SomeObject();Class<? extends SomeObject> cls = SomeObject.class;Method method = cls.getDeclaredMethod("someGetMethod");method.setAccessible(Boolean.TRUE);String xxx = (String) method.invoke(someObject);但是即使这样,还是会涉及到每次方法的重新查找,这个也是比较耗性能的,我们可以通过把方法全部缓存起来的方式,这样只要方法被使用过一次,后面就不需要再次查找了,性能又会有一定的提升:
public Method getMethod(String name, @SuppressWarnings("rawtypes") Class... parameterTypes) throws SecurityException, NoSuchMethodException {Method method = classMethodMap.get(name);//classMethodMap used to store methodif (classMethodMap.get(name) == null) {method = someClass.getDeclaredMethod(name, parameterTypes);//someClass is the reflect object classmethod.setAccessible(Boolean.TRUE);concentrationClassMethodMap.put(name, method);}return method;}
然后调用的时候就只需要通过方法getMethod去获取反射方法即可,如果已经执行过了,就直接返回,如果缓存中不存在,就查找一次后并缓存起来。
原文地址:http://blog.csdn.net/fenglibing/article/details/8926650
6 5
- java反射优化方案
- java反射优化
- Java反射优化
- java反射效率及优化
- Java 反射调用的一种优化
- Java 反射调用的一种优化
- Java使用反射机制优化工厂方法
- java反射机制及性能优化问题
- Java反射性能优化(上)
- zz java反射性能低?如何优化
- 利用java的反射以及在java web反射机制的使用优化程序
- 大数据计算优化:Java 反射为什么慢?
- 【反射】JAVA反射机制
- 反射性能优化 FastMethodInvoker
- 反射性能优化
- JAVA 反射
- java 反射
- Java反射
- iOS开发:git添加忽略文件:UserInterfaceState
- 设计模式:模式和原则
- 利用Windows 10创建免费WIFI
- HttpResponse 内容解压
- 设计原则概念总结
- java反射优化
- tomcat中catalina是什么
- C#禁用numericUpDown控件鼠标中键滚轮消息响应
- QwtPlot简单使用
- Electron框架学习笔记一
- 获取当前路径
- Matlab中的括号()[]{}
- C++链表学习笔记
- android 如何获取连接wifi热点的设备数量