首页 > 代码库 > 关于反射会导致计算机的性能下降的讨论

关于反射会导致计算机的性能下降的讨论

  在操作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)。