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

Spring AOP代理类是否会被垃圾回收器回收?多请求内存占用问题咨询

Spring AOP代理的内存占用与生命周期问题

核心结论

Spring AOP不会因为大量请求产生代理相关的内存浪费问题,代理类/实例的生命周期与目标Bean强绑定,并非随请求频繁创建销毁。

详细解析

  • 代理的创建时机与复用逻辑
    Spring AOP的代理(JDK动态代理或CGLIB代理)是在Bean初始化阶段生成的:每个被切入的目标类只会生成一份代理类定义,对应的代理实例默认和目标Bean一样是单例。也就是说,25个目标类对应25个代理类、25个单例代理实例——不管多少请求过来,都是复用这些已存在的代理实例,不会为每个请求新建代理。

  • 内存开销的可控性
    代理类的字节码本身占用内存极小,单例代理实例的内存占用和目标Bean相当,25个代理实例的总内存开销完全在合理范围内,不会造成所谓的"内存浪费"。

  • 代理的生命周期与GC规则

    • 若目标Bean是单例(绝大多数业务场景),代理实例会和目标Bean一起持续驻留内存,直到Spring容器关闭,不会被GC回收;
    • 若目标Bean是原型/请求作用域,对应的代理实例会随目标Bean一起,在不再被引用(比如请求结束后)时被GC回收。但这类场景属于业务需求特殊配置,Spring也会做相应的内存优化。
  • 特殊场景补充
    如果使用@ScopedProxy实现跨作用域代理(比如单例Bean依赖请求作用域Bean),Spring会生成一个代理类来延迟获取目标Bean实例,这类代理本身还是单例,不会随请求创建新代理,内存占用依然可控。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 14:25:22