弱回调
弱回调主要用于清理嵌入在 v8::ObjectTemplate
中创建的 InternalField
中的 C++对象。当 JavaScript 对象被垃圾收集时,通常也必须删除 C++对象。通过设置弱回调,你可以获得垃圾收集 javascript 对象的通知并采取适当的操作。
记住垃圾收集不是确定性的,这非常重要。你的程序可能会退出带有从未调用的弱引用回调的对象。这些回调对于正常运行的长期运行程序非常重要,但不应依赖于以一致或快速方式释放关键路径资源。 **
为了让垃圾收集器知道它何时应该运行,你必须告诉它你的 C++对象通过 v8::Isolate::AdjustAmountOfExternalAllocatedMemory
调用使用的空间量。这个调用的参数是字节的变化,所以当你分配它时,你经常发送 sizeof(T)
,当你清理你的弱引用回调时,你会发送 -sizeof(T)
。