SpiderMonkey GC 通知和弱引用

SpiderMonkey GC notification and weak references

是否可以在 SpiderMonkey 收集(或即将收集)特定的 "GC thing" 时收到通知?

在 V8 中有 "weak handles" 附加了回调,当 V8 GC 决定处理的对象变得不可访问时,这些应该被调用。即使回调没有被调用(根据 V8 文档,这是可能的),我们仍然可以使用 v8::Persistent<T>::IsNearDeath() 检查句柄指向的对象是否即将被收集。

在SpiderMonkey中,我们有PersistentRooted,这是一个强引用。但是我们还没有找到任何方法以弱方式安全地引用一个对象,所以我们至少可以检查以下一种(或多种)情况:

But we have not found any way to safely reference an object in a weak manner, so we can check at least for one (or more) of the following conditions

[...]

  • the object has been collected;

这可以通过 weak references

实现

如果你想探测它们,你可以简单地检查它们 return 是否为 null。

  • the object is about to be collected;

至少从 C 代码来看,JSClass finalizer 应该允许您这样做。