1. 错误的使用方法
错误的使用方法是每次需要获取Class的对象时都使用Class.forName方法,或者需要调用Class对象上的方法时都调用getDeclaredMethod(String name, Class<?>... parameterTypes)或getMethod(String name, Class<?>... parameterTypes)方法获取Method对象,再调用其上的invoke(Object obj, Object... args)方法。这里存在两个容易造成性能损耗的地方:
Class.forName方法的调用会执行Class类文件在整个类路径下的搜索,频繁调用比较影响性能。
Class对象上的getDeclaredMethod (String, Class<?>...)或getMethod(String, Class<?>...)方法的调用会执行Method对象在Class对象上的搜索。有些同事还使用getMethods()方法获取Method数组,然后执行搜索任务,实际上getMethods()还会执行方法对象的集体Copy比直接使用(String, Class<?>...)或getMethod(String, Class<?>...)方法还要消耗时间及空间。