如何检测对象是否已在Javascript中进行垃圾回收?

前端之家收集整理的这篇文章主要介绍了如何检测对象是否已在Javascript中进行垃圾回收?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在构建一个使用var创建’level’对象的 javascript游戏:
function start() {
   var myGameLevel = new Level(2);
}

这个“Level()”对象具有很多功能,主要是向DOM添加元素并使它们具有交互性.简化:

function Level(i) {
    var _difficulty = i;

    this.init = function(){
         jQuery("#container").append(...game elements here...);
         jQuery("#button").on('click',function() {...});
    }
}

我的问题:如何知道在’start’函数中创建的Level对象是否已被垃圾回收?我的目标是只使用“var”变量,以便没有外部引用.当DOM被清除所有游戏元素时,我预计“级别”对象将从内存中释放,但我怎么能确定?

解决方法

弱引用 are considered a security risk,因此不适用于浏览器中的非特权代码.

这些问题不适用于特权代码或服务器端javascript执行,例如通过node.js,因此可以使用特定于平台的弱引用实现.例如,firefox插件可以使用Components.utils.getWeakReference()

对于某些编程模式WeakMap/WeakSet可能就足够了,但它们不允许程序观察垃圾收集,因为这样做需要一个密钥来探测这些数据结构,但是保留该密钥会阻止对象被收集到第一名.

JS实现者提出的另一个问题是,取决于假设的弱参考API的强大程度 – 例如提供终结通知 – 它可能会暴露大量的GC行为,这反过来可能会限制未来的实现,因为改变行为可能会破坏Web应用程序.

更新:现在is a proposal标准化JS中的弱引用,通过将弱可达对象的释放绑定到JS事件循环来减轻感知风险,使行为更具确定性.

猜你在找的JavaScript相关文章