我正在使用canvas及其包含大量数据(数百万个整数)的ImageData对象。因此,使用几个阵列已经需要大量内存(最大300MB)。有没有必要的时候可以释放一些数组的内存的方法?我正在尝试分配undefined给该变量。这样对吗? 问题来源于stack overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
如果变量持续存在(例如,它是全局变量或某些持久数据结构的一部分),并且指向的数据很大,并且您希望该数据有资格进行垃圾回收,那么为该变量分配较小的对象是正确的。 undefined或null或""将一切正常。您正在执行的操作是清除对大数据的引用,以便有资格进行垃圾回收。如果您的javascript中没有其他引用该数据的内容,则可以由垃圾回收器将其释放。如果还有其他引用,则无法释放它。
例如,如果在全局变量中保存了10,000个元素数组:
var largeDataArray = new Array(10000); 而且,您已经用数据填充了大多数元素,然后可以通过为其分配一些其他值来使该内存有资格进行垃圾回收:
largeDataArray = null; 或者,如果您仍然希望它是一个数组:
largeDataArray = []; 注意:本身超出范围的变量(例如不属于持久闭包的函数中的局部变量)或本身超出范围的对象中的变量不必手动清除。当它们超出范围或删除父对象时,其中包含的数据也将有资格进行垃圾回收。
因此,仅当您明确想要释放持久变量中保存的数据时才需要清除变量,并且通常仅在数据量很大或您添加了很多数据时担心此问题才有意义。高达数兆字节的数据(与台式机浏览器相比,智能手机上较低级别的内存使用受到更大关注)。