JDK CGLIB Javassist ASM 动态代理 比较
所属分类 java
浏览量 1210
字节码增强 ,动态代理
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实例