首页  

JDK CGLIB Javassist ASM 动态代理 比较     所属分类 java 浏览量 290
字节码增强 ,动态代理

jdk8
cglib 3.2.12
javassist
3.26.0-GA
asm7.1

完整测试代码
https://gitee.com/dyyx/proxydemo/blob/master/src/main/java/dyyx/DynamicProxyTest.java

易用性 
JDK代理最简单,只需要使用 Proxy 和 InvocationHandler ,不过只能代理接口
CGLIB 需要引入CGLIB JAR包
Javassist 需要用字符串拼接Java源代码 
ASM最麻烦,需要手工写字节码 

基于接口的动态代理,建议使用JDK
其他情况建议使用 Javassist 或 CGLIB

JavassistProxy  和 CGLIBProxy 用法差不多 ,为何性能差这么多?

Javassist(bytecode) 性能和ASM差不多,但比ASM容易编写




Java动态代理InvocationHandler例子 RPC原理简介 jdk代理与cglib代理的区别 AOP要点整理
本机MAC 8G内存 测试结果 Create JDK Proxy: 9 ms Create CGLIB Proxy: 267 ms Create Javassist Proxy: 273 ms Create Javassist Bytecode Proxy: 202 ms Create ASM Proxy: 1 ms ================ NoProxy : 13 ms JDKProxy : 154 ms CGLIBProxy : 210 ms JavassistProxy : 675 ms JavassistBytecodeProxy: 157 ms ASMBytecodeProxy : 163 ms ---------------- NoProxy : 99 ms JDKProxy : 367 ms CGLIBProxy : 327 ms JavassistProxy : 1023 ms JavassistBytecodeProxy: 147 ms ASMBytecodeProxy : 140 ms ---------------- NoProxy : 136 ms JDKProxy : 228 ms CGLIBProxy : 202 ms JavassistProxy : 750 ms JavassistBytecodeProxy: 137 ms ASMBytecodeProxy : 157 ms ---------------- NoProxy : 139 ms JDKProxy : 231 ms CGLIBProxy : 197 ms JavassistProxy : 504 ms JavassistBytecodeProxy: 132 ms ASMBytecodeProxy : 143 ms ---------------- NoProxy : 134 ms JDKProxy : 325 ms CGLIBProxy : 326 ms JavassistProxy : 676 ms JavassistBytecodeProxy: 145 ms ASMBytecodeProxy : 176 ms ---------------- NoProxy : 153 ms JDKProxy : 260 ms CGLIBProxy : 204 ms JavassistProxy : 503 ms JavassistBytecodeProxy: 137 ms ASMBytecodeProxy : 142 ms ---------------- NoProxy : 129 ms JDKProxy : 237 ms CGLIBProxy : 195 ms JavassistProxy : 479 ms JavassistBytecodeProxy: 138 ms ASMBytecodeProxy : 137 ms ---------------- NoProxy : 146 ms JDKProxy : 224 ms CGLIBProxy : 205 ms JavassistProxy : 466 ms JavassistBytecodeProxy: 135 ms ASMBytecodeProxy : 135 ms ---------------- NoProxy : 161 ms JDKProxy : 259 ms CGLIBProxy : 196 ms JavassistProxy : 472 ms JavassistBytecodeProxy: 144 ms ASMBytecodeProxy : 133 ms ---------------- NoProxy : 136 ms JDKProxy : 248 ms CGLIBProxy : 199 ms JavassistProxy : 479 ms JavassistBytecodeProxy: 135 ms ASMBytecodeProxy : 134 ms ---------------- NoProxy : 148 ms JDKProxy : 232 ms CGLIBProxy : 197 ms JavassistProxy : 471 ms JavassistBytecodeProxy: 138 ms ASMBytecodeProxy : 140 ms ---------------- NoProxy : 136 ms JDKProxy : 226 ms CGLIBProxy : 203 ms JavassistProxy : 510 ms JavassistBytecodeProxy: 158 ms ASMBytecodeProxy : 197 ms ---------------- NoProxy : 151 ms JDKProxy : 230 ms CGLIBProxy : 206 ms JavassistProxy : 505 ms JavassistBytecodeProxy: 135 ms ASMBytecodeProxy : 135 ms ---------------- NoProxy : 131 ms JDKProxy : 217 ms CGLIBProxy : 285 ms JavassistProxy : 790 ms JavassistBytecodeProxy: 188 ms ASMBytecodeProxy : 166 ms ---------------- NoProxy : 165 ms JDKProxy : 230 ms CGLIBProxy : 269 ms JavassistProxy : 484 ms JavassistBytecodeProxy: 131 ms ASMBytecodeProxy : 185 ms ---------------- NoProxy : 132 ms JDKProxy : 229 ms CGLIBProxy : 188 ms JavassistProxy : 473 ms JavassistBytecodeProxy: 135 ms ASMBytecodeProxy : 135 ms ---------------- NoProxy : 188 ms JDKProxy : 232 ms CGLIBProxy : 246 ms JavassistProxy : 477 ms JavassistBytecodeProxy: 139 ms ASMBytecodeProxy : 139 ms ---------------- NoProxy : 138 ms JDKProxy : 237 ms CGLIBProxy : 196 ms JavassistProxy : 531 ms JavassistBytecodeProxy: 158 ms ASMBytecodeProxy : 134 ms ---------------- NoProxy : 130 ms JDKProxy : 229 ms CGLIBProxy : 203 ms JavassistProxy : 485 ms JavassistBytecodeProxy: 173 ms ASMBytecodeProxy : 172 ms ----------------

上一篇     下一篇
Java类加载过程

2020热词中英文

Java字节码增强简介

SpringBoot异步任务 @Async

groovy实例

模板引擎velocity实例