【问题标题】:SpiderMonkey GC notification and weak referencesSpiderMonkey GC 通知和弱引用
【发布时间】:2016-04-02 02:54:42
【问题描述】:

是否可以在 SpiderMonkey 收集(或即将收集)特定的“GC 事物”时收到通知?

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

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

  • 对象已无法访问;
  • 对象已被收集;
  • 对象即将被收集;
  • 该对象只有一个引用(这是我们的应用程序持有的那个)

【问题讨论】:

    标签: javascript garbage-collection spidermonkey


    【解决方案1】:

    但是我们还没有找到任何以弱方式安全引用对象的方法,因此我们至少可以检查以下一种(或多种)情况

    [...]

    • 对象已被收集;

    这可以通过weak references实现

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

    • 对象即将被收集;

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

    【讨论】:

    • 谢谢。我们没有在我们的项目中使用成熟的 xul 库(只是 SpiderMonkey),所以我们不能使用 Component.utils。但是 JSClass 终结器对于我们的任务来说已经足够好了。将需要一些额外的工作来将非对象 GCThings 包装到 JSObject 中,这应该可以解决问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-28
    相关资源
    最近更新 更多