javascript删除对象安全的内存泄漏

时间:2013-11-19 04:07:04

标签: javascript object memory-leaks

这是我的代码,我不知道它是否有利于防止内存泄漏?帮助以及如何测试泄漏内存?

var Test = function () {
        this.ar = [];
        this.List = function () {
            return this.ar;
        }
        this.Add = function (str) {
            this.ar.push(str);
        }
    }

使用:

var t = new Test();
        t.Add("One");
        t.Add("Two");
        t.Add("Three");
        alert(JSON.stringify(t.List()));
        t = undefined;
        alert(JSON.stringify(t.List() )); 

1 个答案:

答案 0 :(得分:3)

t设置为undefined将清除对该对象的引用。如果代码中没有对该对象的其他引用,那么垃圾收集器确实将释放该Test()对象。这就是javascript中的工作方式。您不删除对象,只需清除对它的任何引用。当所有引用都消失后,该对象可用于垃圾回收。

javascript中的实际delete关键字仅用于从delete t.list中删除对象中的属性。

不同的浏览器有不同的工具可用于跟踪内存使用情况。我所知道的用于测试的最通用的黑盒方法是一遍又一遍地运行一个循环,在那里你将非常大的对象(我经常使用大字符串)分配给你的测试(以消耗大量的内存)与某种{ {1}}在一定数量的运行之间(让垃圾收集器有一些循环),然后只观察浏览器的整体内存使用情况。只要整体内存使用不会持续增加,因为你继续进行越来越多的运行,那么你就不会有明显的泄漏。

个别浏览器可能提供更全面的测量工具。 Chrome的信息here