在操作Java框架时,通过会用到反射技术,但是反射技术有一个缺点:会导致计算机的性能下降,因为反射占用了计算机的缓存。比如通过反射技术创建某一类的实例时,会先得到该类的构造函数,如果缓存中没有该构造函数,JVM就会创建一个构造函数,并将这个构造函数缓存起来,当下次再创建该构造函数的实例时,就不会去字节码文件中获得构造函数,而是直接通过缓存获得该构造函数,然后再创建实例对象。(可以参看Class类的中newInstance部分的源代码)
网上有这种说法,我觉得是不准确的,期待各位的指正:
反射会导致计算机性能下降
eg:两种方式建立对象的区别
1,String str = new String ("abc")
2,Constructor con = Class.forName("java.lang.String").getConstructor(String.class)
String str2 = (String)con.newInstance("abc")
第一种方法:class--------------------------->new
Object
第二中方法:class----->Constructor---->new Object
显然第一中方法速度快,内部代码用到了缓存机制保存了默认的构造方法,而第二种方法要去加载string字节码文件让后找到选的的构造方法区new对象效率性能下降。
我觉得导致计算机性能下降是因为jvm为了方便下一次创建实例对象,将构造函数缓存起来了,占用了计算机的缓存空间。另外,第一种方法在new对象时,也要加载类的字节码,上面这种说法只能说明反射会导致本程序的执行效率下降(time)。
关于反射会导致计算机的性能下降的讨论,布布扣,bubuko.com