java反射性能
Ⅰ java反射的性能为什么低
java反射需要将内存中的对象进让察行解析,涉及到与底层c语言的交互,速度会比较慢。
java反射得到的每一个Method都有一个root,不暴漏给外部,而是每镇滑好次一个Method。具体的反射调用逻辑是委托给MethodAccessor的,而accessor对象会御铅在第一次invoke的时候才创建,是一种lazy init方式。而且默认Class类会cache method对象。目前MethodAccessor的实现有两种,通过设置inflation,一个native方式,一种生成java bytecode方式。native方式启动快,但运行时间长了不如java方式,个人感觉应该是java方式运行长了,jit compiler可以进行优化。所以JDK6的实现,在native方式中,有一个计数器,当调用次数达到阀值,就会转为使用java方式。默认值是15。java方式的实现,基本和非反射方式相同。
Ⅱ java面试题:如何提高反射效率
1、在系统启动阶段使用反射。
2、将反射得到元数据保存起来,使用时,只需从内存中调用即可。
3、hotspot虚拟机会对执行次数较多的方法进行优化(例如使用jit技术)。
4、使用高性能的反射库,应该会比自己写缓存效果好。
Ⅲ java反射究竟消耗多少效率
首先明确概念
String str = new String();
上面的String称为‘类’,str指向的目标称为‘实体’。到此无法理解的话,请温习java面向对象的基础后再往下阅读。
反射实现的核心是Class类。运行时,每一个类都对应一个Class实体,利用这些实体完成反射行为。这些实体是在jvm进行类加载时完成创建的,不论是否有反射操作,所以和反射的开销无关。
反射机制是对人来说的一种逻辑特征,对计算机来说,和普通的方法调用没有任何区别,所以在编译阶段的开销差距不大,可能会更小(因为引包更少)。
java是强类型语言,反射能够在使用上弱化这种‘强’。正常的实体创建和方法调用,是通过地址直接调用的,而反射是通过字符串的匹配来寻址,再按地址调用,中间多出一步寻址。寻址的开销在执行实体内部方法以及静态方法时和Map类的键值对寻址开销相同,基本可以忽略。构造方法稍微复杂一点,但差距也不大。
综上,就本人考虑到的内容,反射相比直接调用,只增加了简单几步寻址过程,不会对效率造成太大影响。
Ⅳ JAVA中反射是什么
JAVA中反射是动态获取信息以及动态调用对象方法的一种反射机制。
Java反射就是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;并且能改变它的属性。而这也是Java被视为动态语言的一个关键性质。
Java反射的功能是在运行时判断任意一个对象所属的类,在运行时构造任意一个类的对象,在运行时判断任意一个类所具有的成员变量和方法,在运行时调用任意一个对象的方法,生成动态代理。
(4)java反射性能扩展阅读:
JAVA中反射实例:
1、Class superClass=clazz.getSuperclass();//获取父类。
System.out.println("getSuperclass:"+superClass)。
2、Class[] interfaces=clazz.getInterfaces();//获取实现接口。
System.out.println("getInterfaces:"+interfaces.length)。
3、Constructor[] cons=clazz.getConstructors();//构造方法。
System.out.println("getConstructors:"+cons.length)。
参考资料来源:网络: JAVA反射机制