反射机制指的是在程序运行时可以获取自身的信息。在java中,只需要给定类名,就可以通过反射机制获取该类所有的属性和方法。
使用反射的好处是提高了程序的灵活性和扩展性,但是也会带来一些问题,比如:
-
代码的可读性和可维护性变低。
-
反射代码的执行性能低。
-
反射破坏了封装性。
所以一般我们在业务代码中尽量避免使用反射,但是如果要成为一名合格的java程序员,我们要能够做到读懂中间件和框架中的反射代码,并在某些场景下利用反射解决一些问题。
那么反射为什么这么慢呢?
主要有以下几个原因:
-
反射需要动态的解析类,所以java虚拟机的一些优化就不会起作用。
-
反射需要包装和拆包参数,这个过程中可能会产生大量的对象,触发gc,那么包装和拆包的过程以及gc都是需要耗时的。
-
反射获取方法时,需要遍历方法数组,并且需要对方法的可见性以及对应的参数等进行额外的检查,这些操作都是耗时的。