【问题标题】:How does Object.observe/unobserve interact with garbage collection?Object.observe/unobserve 如何与垃圾收集交互?
【发布时间】:2014-08-14 17:46:26
【问题描述】:

在一个对象上拥有一个活动的 Object.observe 会阻止它被垃圾收集吗?您是否需要先调用 Object.unobserve 才能对其进行垃圾收集?还是 GCing 一个对象会删除它所有的活动观察者?

【问题讨论】:

    标签: javascript garbage-collection ecmascript-harmony object.observe


    【解决方案1】:

    观察一个对象并不能让它保持活力。一旦对象死亡,它的观察者就不会再收到任何事件。至少在 V8 的实现中是这样的,这是迄今为止唯一的一个。如果有一天这个特性成为标准,那么假设它也适用于其他实现可能是安全的。

    然而,观察保持其活动的观察者活着,加上一些与每个观察者函数相关的内部堆分配数据结构。事实上,这些额外的数据只会在函数本身也死亡时才会死亡,即使它早已停止观察任何东西。

    【讨论】:

    • 我明白了。所以可以肯定地说你必须说你必须为你创建的所有观察者做你自己的记账,并在你删除对被观察对象的引用之前单独调用 Object.unobserve 吗?
    • @alexp,这不应该是必要的。一个只观察死对象的函数不再是我上面所说的“活动”。事实上,尝试手动管理生命周期很容易出错,以至于它所引入的额外簿记数据很有可能使数据保持更长的生命周期。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-03
    • 1970-01-01
    • 2011-01-21
    • 1970-01-01
    • 2016-03-26
    相关资源
    最近更新 更多