反射和动态代理性能对比
因为项目中需要用反射机制加载类,所以做了下性能评测
测试结果对比表:(平均执行时间)
原生 | JDK反射 | JDK动态代理 | CGLIB反射 | CGLIB动态代理 | JAVAASSIST动态代理 | JAVAASSIST动态代理(字节码生成) | ASM动态代理 | |
加载类(ms) | 0(332ns) | 1(1304383ns) | 4 |
(FastClass) 0(49328ns) |
22 | 32 | 50 | 0(629017ns) |
方法调用(ms) | 34 | 289 | 133 |
(FastMethod) 25 |
54 | 153 | 39 | 36 |
结论:
无参数的加载类,响应时间排序:CGLIB Reflect<ASM<JDK Reflect,CGLIB最快;
有参数的加载类,响应时间排序:JDK Reflect<CGLIB,JDK反射最快;
方法的调用,响应时间排序:ASM<CGLIB Reflect<JDK Reflect;
加载类建议采用JDK反射
方法调用建议采用CGLIB