反射真正损耗性能的地方在于getxxx操作,而set方法相差无几 例如: hashSet.getClass().getField("字段名"); hashSet.getClass().getMethod("方法名"); hashSet.getClass().getDeclaredField("字段名"); hashSet.getClass().getConstructor(参数类型集合)
这些get方法之所以慢是因为根据方法名或字段名在获取method或field时类似于在class所在方法区做遍历匹配,拿到之后要么反射执行方法,要么反射field赋值;而如果是直接调用,则是通过将方法或属性的符号引用转变为直接引用找到方法或字段的所在,直接进行操作