【发布时间】:2020-05-08 01:45:45
【问题描述】:
我正在开发一个具有以下功能的库:
- 一些相当复杂的循环引用。
- 注册各种事件监听器。
- 为全局缓存使用一些(单一样式的)对象
这些属性意味着我的应用程序中的一堆东西不太可能被自动垃圾收集。
如果对象的最后一个引用被垃圾回收,我还想自动取消注册事件处理程序,增加更大药水的机会 的图书馆可以得到垃圾收集。
在 PHP 中,可以为此目的使用 __destruct 方法。 Javascript中是否有类似的机制?
从广义上讲,这将是我的依赖图的一个虚构示例:
Parent
- childA
- childB
Parent 在这种情况下只有外部引用,所以如果不再使用这个对象,Javascript 可以 GC,但是当这种情况发生时,我希望 Parent 通知 childA 和 childB 他们可以 de-注册他们的事件处理程序并进行额外的清理。
当然,我可以在父级上添加 release() 或 destroy() 方法,但我希望它能够在不需要最终用户明确向父级发出信号的情况下工作。
【问题讨论】:
-
您正在寻找weak references 及其终结者。另见v8.dev/features/weak-references。但就目前而言,
release()似乎是您最好的选择。 -
@Bergi 想把它变成答案吗?它对我有用!
-
啊,一开始我没注意到你是用nodejs工作的,当然更适合使用实验性功能。
标签: javascript node.js garbage-collection