为什么我通过Array.join泄漏内存?

时间:2018-09-06 03:02:15

标签: javascript

这行代码的内存将增加约100兆字节,并且不会被释放:

var json = new Array(100000000).join(","); 

为什么?

1 个答案:

答案 0 :(得分:0)

this answer中所述,数组的每个元素将占用近一个字节。 100,000,000字节大约为95MB。在垃圾收集器认为合适之前,不会释放为数组保留的内存。

MDN中所述:

  

大多数内存管理问题都在此阶段出现。这里最困难的任务是查找何时“不再需要分配的内存”。通常,需要开发人员确定程序中不再需要该内存的位置,然后释放它。

因此,当浏览器确定不再需要该内存时,或者当开发人员明确声明不再需要该内存时,该内存将被释放(在该页面的其他地方展示)。