当 JS 值被垃圾回收时调用本机代码

Posted

技术标签:

【中文标题】当 JS 值被垃圾回收时调用本机代码【英文标题】:Call native code when a JS value is garbage collected 【发布时间】:2020-06-24 11:20:18 【问题描述】:

在我的应用程序中,我创建了一些 JS 对象,并在 C++ 端创建了一些用于运行某些处理的对象。 我想在不再需要 C++ 对象时删除它们:对应的 JS 对象是 Garbage Collected

我试图在 Cobalt 源代码/文档中找到它,但我找不到。我确实看到了 ScriptValue::Reference 但这似乎是相反的: 通过声明 JS 值和 C++ 对象之间的关系来防止 JS 对象被垃圾回收。

有人可以提供一些提示如何实现吗? (当对象被垃圾回收时,在 C++ 中调用一些回调)。

【问题讨论】:

【参考方案1】:

任何暴露给 javascript 的 C++ 类都必须继承(直接或间接)script::Wrappable,它有一个虚拟析构函数。当相应的 JavaScript 对象因垃圾回收或 JS VM 拆除而被销毁时,将调用此析构函数。

通常需要注意:GC 顺序和时间是不确定的。如果您需要尽快释放关键资源,请向 JavaScript 公开显式清理方法。

请参阅cobalt::dom::Node::~Node(),了解销毁时执行的清理示例。

【讨论】:

以上是关于当 JS 值被垃圾回收时调用本机代码的主要内容,如果未能解决你的问题,请参考以下文章

JS学习之生命周期与垃圾回收机制

5、垃圾回收机制

JS内存垃圾回收用什么算法?

.net 垃圾回收 工作站与服务器区别

Python 中的垃圾回收机制

js的垃圾回收机制