【问题标题】:Javascript array deletion for garbage collection用于垃圾收集的 Javascript 数组删除
【发布时间】:2013-07-23 09:12:22
【问题描述】:

我有一个 javascript 对象数组,每个对象都是用“new”创建的。如果发生错误,我想清除整个数组,以便 JS 引擎对它进行 GC。为此,只需将数组变量设置为“null”就足够了,还是我需要拼接数组中的所有元素并将它们设置为null,然后再将数组变量设置为“null”?

我问的原因是,在 Firefox 中,我在将数组分配给 null 之前显示(console.log)数组,并且显示的对象(通常在显示中更新,我假设甚至稍后)仍然显示数组的元素当我稍后检查它时,因此我怀疑这些元素是否真的被释放了。

【问题讨论】:

    标签: javascript performance garbage-collection


    【解决方案1】:

    要清除数组,只需将长度设置为零:

    var arr = [1,2,3,4,5];
    
    console.log(arr);
    arr.length=0;
    console.log(arr);
    

    结果:

    [1, 2, 3, 4, 5]
    [] 
    

    编辑: 刚刚发现这个话题:http://davidwalsh.name/empty-array

    查看 cmets 似乎将变量设置为新数组是最简单的方法:

    arr = [];
    

    根据测试结果,内存的 GC 比将长度设置为 0 更快。我想这与触发 GC 的分配有关。

    这里有一个关于各种方法的有趣的性能测试:http://jsperf.com/array-destroy

    【讨论】:

    • 这是否也能确保释放其中的对象?
    • @source.rar - 我想是的,只要你没有在其他地方引用它们。
    • 谢谢。考虑到 Chrome 和 Firefox,将 arr 设置为 null (arr = null) 似乎是获得可接受性能的最佳选择。
    • 另一个性能测试:jsperf.com/truncating-arrays-correctly 显示 [] 和 length = 0 之间没有太大区别
    猜你喜欢
    • 1970-01-01
    • 2012-04-09
    • 2013-01-26
    • 2011-07-24
    • 2012-03-24
    • 2013-04-21
    • 2012-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多