当前位置: 首页 > article >正文

Jdk动态代理源码缓存优化比较(JDK17比JDK8)

目录

JDK 8的缓存实现

JDK 17的缓存实现 

优化比较

总结实际应用影响


JDK 8的缓存实现

// JDK 8
private static final WeakCache<ClassLoader, Class<?>[], Class<?>> proxyClassCache = 
    new WeakCache<>(new KeyFactory(), new ProxyClassFactory());

 在JDK8中使用WeakCache存储代理类,key是ClassLoader和接口数组的组合,value是生成的代理类Class对象

JDK 17的缓存实现 

// JDK 17
private static final ClassLoaderValue<Constructor<?>> proxyCache = 
    new ClassLoaderValue<>();

优化比较

 我们可以进行以下的比较

// JDK 8缓存代理类
WeakCache<ClassLoader, Class<?>[], Class<?>>

// JDK 17直接缓存构造器
ClassLoaderValue<Constructor<?>>
// JDK 8
Class<?> proxyClass = proxyClassCache.get(loader, interfaces);
Constructor<?> cons = proxyClass.getConstructor(constructorParams);

// JDK 17
Constructor<?> cons = proxyCache.sub(intf).computeIfAbsent(...);

 JDK 8是缓存Class对象,而JDK 17是直接缓存Constructor,避免额外的反射调用。

而且在JDK17还对单接口和多接口实现再次进行了优化

// 单接口
proxyCache.sub(intf)  // 使用接口Class作为key创建子缓存
         .computeIfAbsent(  // 在子缓存中查找或计算
             loader,        // 使用ClassLoader作为key
             (ld, clv) -> new ProxyBuilder(ld, clv.key()).build()  // 缓存未命中时的计算逻辑
         )

// 多接口
proxyCache.sub(intfs)  // 使用接口List作为key创建子缓存
         .computeIfAbsent(...)  // 同上

多重优化提供了更轻量级的缓存实现

总结实际应用影响

高并发场景:更快的代理对象创建速度,避免额外的反射调用

内存敏感场景:更少的内存占用,减少内存泄露的风险


http://www.kler.cn/a/466839.html

相关文章:

  • 3125: 【入门】求1/1+1/2+2/3+3/5+5/8+8/13+13/21……的前n项的和
  • AI代码开发实践-微信小程序开发
  • QML自定义滑动条Slider的样式
  • java基础学习(接口和抽象类的区别)
  • 【Yarn】通过JMX采集yarn相关指标的Flink任务核心逻辑
  • 超越YOLO11!DEIM:先进的实时DETR目标检测
  • 推荐一些关于C#中LINQ的学习资料
  • Qt窗口获取Tftpd32_svc服务下载信息
  • [redux] ts声明useSelector和useDispatch
  • 嵌入式 Linux LED 驱动开发实验
  • 运维工具汇总
  • 【数据分析实战】24年T4某二手车交易平台数据分析
  • 【机器学习】【朴素贝叶斯分类器】从理论到实践:朴素贝叶斯分类器在垃圾短信过滤中的应用
  • 【数据库】简答题汇总
  • 力扣28找出字符串中第一个匹配项的下标
  • PyTorch中的__init__.pyi文件:作用与C++实现关系解析
  • 《探秘开源大模型:AI 世界的“超级引擎”》
  • Github 2024-12-30 开源项目周报 Top15
  • Chrome浏览器实例的TypeScript自动化脚本
  • Uniapp跨域请求
  • ​​​​​​​CDP集群安全指南系列文章导读
  • 无人机解码物流配送技术详解
  • ReactiveStreams、Reactor、SpringWebFlux
  • 【深度学习遥感应用中的“信息”】空间信息、语义信息、纹理信息、边缘信息、表层信息、深层信息...
  • 探索 AIGC 的基础知识:人工智能生成内容的全景视图
  • 深入解析与实践:MySQL