如何释放JavaScript中的内存

我正在使用包含大量数据(数百万整数)的canvas和ImageData对象。 所以使用一些数组已经占用了大量的内存(高达300MB)。 有没有办法在不需要的时候释放一些数组的内存? 我试图将undefined分配给该variables。 这样对吗?

如果variables持续存在(例如,它是全局的或某些持久数据结构的一部分),并且它指向的数据很大,并且您希望该数据符合垃圾回收的条件,那么您可以正确地为该variables分配一些小数据。 undefinednull""将全部工作。 你正在做的是清除对大数据的引用,以便它有资格进行垃圾收集。 如果在JavaScript中没有任何其他的引用,那么它可以被垃圾收集器释放。 如果有其他的东西有引用,那么它就不能被释放。

例如,如果你在一个全局variables中有一个10,000个元素的数组:

 var largeDataArray = new Array(10000); 

而且,你已经用数据填充了大部分元素,那么你可以允许这个内存有资格进行垃圾回收,方法是分配一些其他的值,如:

 largeDataArray = null; 

或者如果你仍然希望它是一个数组:

 largeDataArray = []; 

注意:自身超出范围的variables(如不是持久闭包的函数中的局部variables)或者超出范围的对象中的variables不必手动清除。 当它们超出范围或父对象被删除时,其中包含的数据也将有资格进行垃圾回收。

所以,只有当你明确地想要释放持久variables中的数据时才需要清除一个variables,而且通常只有在数据量很大时才需要担心,或者你有很多这样的variables高达数兆字节的数据(在桌面浏览器中,智能手机上较低级别的内存使用率更高)。

JavaScript有自动内存pipe理。 包含不再被引用的对象的内存将有资格进行垃圾回收,除非你有内存泄漏。 通常不需要手动分配undefined的variables。

如果你的程序使用太多的内存,你应该缩小数组,以摆脱不再需要的元素。 请参阅Array.popArray.shiftArray.splice