javascript - 在 V8 中,如何在垃圾回收 JavaScript 对象后删除包装的 C++ 对象?

标签 javascript v8 embedded-v8

假设我有 this tutorial 中提供的代码.

我该如何修改它,以便当 V8 的 GC 销毁 JavaScript 包装器时,创建的 Point C++ 对象调用其析构函数并从内存中删除?

最佳答案

您想创建一个持久句柄并使其变弱 (v8::Persistent::MakeWeak(data, cb))。在回调中,您可以删除 C++ 对象。与垃圾收集器一样,确定弱可达性的确切时间取决于执行 GC 的时间。因此, native 资源的释放可能比您预期的要晚得多。您可以通知 V8 您持有的原生资源数量 (v8::AdjustAmountOfExternalAllocatedMemory)。

node的“ObjectWrap”封装了双向native/JS对象映射和弱回调:https://github.com/ry/node/blob/master/src/node_object_wrap.h

关于javascript - 在 V8 中,如何在垃圾回收 JavaScript 对象后删除包装的 C++ 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4573446/

相关文章:

windows - 您可以从服务器端 javascript 调用 COM 组件吗?

node.js - node.js 插件上的 undefined symbol

javascript - 更改 x 轴间隔显示 - dimple.js

javascript - 将每个星号包裹在 span 标签中

javascript - 抗锯齿在 Three.js 中不起作用

arrays - 使用V8引擎的二进制数组

javascript - Bootstrap - 同时切换导航和 Accordion 面板

javascript - 在 JavaScript 中,为什么 "reverse while"循环比 "for"快一个数量级?

c++ - hello-world.cc 样本似乎泄漏了内存

javascript - v8 JavaScript 函数执行在 Runtime_TryInstallOptimizedCode 中挂起