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

Observable回调中传递局部变量的有效性及内存回收问题

问题解答

是的,只要Some类的实例和Observable的回调处于活跃状态,Object实例o就会一直驻留内存,不会被垃圾回收。

具体原因如下:

  • 在method()方法中创建的o,被传递给了observable.observe的回调Lambda表达式,这个Lambda会持有o的强引用。
  • observable是Some类的成员变量,只要Some的实例还处于活跃状态(未被回收),observable就会持续存在,它所保存的回调Lambda也会一直被持有。
  • 此时存在一条完整的强引用链:Some实例 → observable → 回调Lambda → o,垃圾回收器不会回收存在强引用的对象,所以o会一直保持有效。

补充说明:

  • 如果后续observable移除了该回调(比如调用取消订阅的方法),或者Some的实例被垃圾回收,那么回调Lambda和o之间的引用链就会断裂,o会在合适的时机被垃圾回收。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 05:32:41