You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何CglibAopProxy使用WeakHashMap作为同步锁?

关于CglibAopProxy中validatedClasses使用WeakHashMap的原因

核心逻辑:利用弱引用特性避免内存泄漏,适配类加载器生命周期

validatedClasses的作用是缓存已完成验证的类,避免重复执行doValidateClass的校验逻辑以提升性能。选择WeakHashMap而非普通HashMap,核心是借助它的弱引用Key特性:

  • 自动清理无用缓存项:WeakHashMap的Key是弱引用类型,当某个Class对象不再被其他强引用持有(比如对应类加载器被卸载、该类在应用中不再被使用),GC会自动回收这个Class对象,WeakHashMap中对应的entry也会随之被移除。如果用普通HashMap,Class对象会被强引用绑定,即使类已被卸载,缓存项仍会留存,进而造成内存泄漏。
  • 适配类加载器场景:Java中不同类加载器加载的同名类是不同的Class实例。在Web应用热部署、自定义类加载器这类场景下,旧类加载器销毁时,它加载的Class对象理应被回收。WeakHashMap能自动清理这些关联的验证记录,无需手动维护缓存的过期或清理逻辑。
  • 配合校验逻辑的幂等性:doValidateClass的校验操作是幂等的,重复执行也不会引发问题,但缓存能避免重复开销。WeakHashMap在保证缓存性能的同时,无需担忧长期运行后缓存膨胀或内存泄漏的问题。

额外说明

代码中的synchronized (validatedClasses)同步块是为了保证多线程环境下,不会对同一个类重复执行校验逻辑,避免并发冲突。WeakHashMap本身并非线程安全,因此需要加锁保护操作过程。

内容的提问来源于stack exchange,提问作者Kusch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 21:01:55