(1)Proxy 毕竟是通过反射实现的,必须在效率上付出代价:有实验数据表明,调用反射比一般的函数开销至少要大 10 倍。而且,从程序实现上可以看出,对 proxy class 的所有方法调用都要通过使用反射的 invoke 方法。因此,对于性能关键的应用,使用 proxy class 是需要精心考虑的,以避免反射成为整个应用的瓶颈。

(2)CGLib封装了asm,可以再运行期动态生成新的class。ASM 能够通过改造既有类,直接生成需要的代码。增强的代码是硬编码在新生成的类文件内部的,没有反射带来性能上的付出。同时,ASM 与 Proxy 编程不同,不需要为增强代码而新定义一个接口,生成的代码可以覆盖原来的类,或者是原始类的子类。

(3)CGLib在不同频次的调用性能会发生变化,体现为调用频次越高、性能越好。

(4)不同版本的JDK中JDK Proxy的性能也不尽相同,越高版本的JDK(JDK7及以上),性能提升越明显。