Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
以下代码是否会导致JavaScript内存泄漏?_Javascript_Memory Leaks - Fatal编程技术网

以下代码是否会导致JavaScript内存泄漏?

以下代码是否会导致JavaScript内存泄漏?,javascript,memory-leaks,Javascript,Memory Leaks,下面是非常大的逻辑的一部分,函数跟踪只是为了简化。Track从数据库加载对象并存储在缓存中 var cache = []; function newObject(a){ var b = {}; b.tracker = a; cache.push(b); } var t = {}; track(t); track(t); track(t); track(t); ... cache.length = 0; track(t); track(t); track(t); tr

下面是非常大的逻辑的一部分,函数跟踪只是为了简化。Track从数据库加载对象并存储在缓存中

var cache = [];

function newObject(a){
   var b = {};
   b.tracker = a;
   cache.push(b);
}

var t = {};

track(t);
track(t);
track(t);
track(t);

...

cache.length = 0;

track(t);
track(t);
track(t);
track(t);

....
cache.length = 0;
清除缓存后,是否因为b.tracker保留对t的引用而导致内存泄漏?为了澄清,跟踪器t不存储对创建的任何对象的任何引用

我需要以下方法吗

for(var i=0;i<cache.length;i++){
    cache[i].tracker = null;
}
cache.length = 0;

用于(var i=0;iJavascript应该回收t占用的内存,如果这是您所做的全部。如果将数组长度设置为零,则不必将数组项设置为null。

Javascript应该回收t占用的内存,如果这是您所做的全部。如果设置数组长度,则不必将数组项设置为nulls length为零。

当变量超出作用域时,它会被垃圾收集。现在要删除该
缓存,有三种方法:

delete cache; // which is not possible because it's defined with var.
cache = [];
cache.length = 0;
对于最后一个,
cache.length=0;
我注意到效果是理想的。它会导致
n个类型为
delete cache[I]
的delete操作
被取消引用,超出范围,垃圾收集器开始工作

是的,JavaScript引擎足够聪明,可以做到这一点。我用4套评测工具(Chrome、Safari、Firefox和Opera)进行了测试。我缺乏拥有Windows机器所需的极大耐心,因此无法在Internet Explorer中进行测试

更新


根据@Renan的说法,上述方法在Internet Explorer中同样有效,因此
cache.length=0
无疑是一种方法。

当变量超出范围时,它会被垃圾收集。现在要删除该
缓存,有三种方法:

delete cache; // which is not possible because it's defined with var.
cache = [];
cache.length = 0;
对于最后一个,
cache.length=0;
我注意到效果是理想的。它会导致
n个类型为
delete cache[I]
的delete操作
被取消引用,超出范围,垃圾收集器开始工作

是的,JavaScript引擎足够聪明,可以做到这一点。我用4套评测工具(Chrome、Safari、Firefox和Opera)进行了测试。我缺乏拥有Windows机器所需的极大耐心,因此无法在Internet Explorer中进行测试

更新


根据@Renan的说法,上述功能在Internet Explorer中也同样有效,因此
cache.length=0
绝对是一个好办法。

不是downvoter,但我只能假设你得到了downvoter,因为你还没有指出你是否已经测试过代码,看看它是否会导致内存泄漏。你实际上是说,“这里有一些代码,请帮我测试一下。"没有办法测试这个,我已经创建了1000个对象,但是对象的大小几乎不一样,看不出chrome在内存管理方面有什么明显的不同。不是downvoter,但我只能假设你得到了DownVote,因为你没有指出你是否已经测试过代码,看它是否导致内存泄漏。你是ef有效地说,“这里有一些代码,请为我测试一下。”没有办法测试这个,我已经创建了1000个对象,但是对象几乎没有任何大小,在chrome的内存管理中看不到任何明显的差异。它在IE 9+中也能正常工作。我讨厌任何使用旧版本的人(已经有10个了),虽然我有预感它在IE8中也能工作。它在IE9+中也能工作。我讨厌任何使用旧版本的人(它已经在10个FFS中),尽管我有预感它在IE8中也能工作。