javascript - 如何释放 JavaScript 中的内存

标签 javascript arrays memory-management html5-canvas

我正在使用 Canvas 及其包含大量数据(数百万个整数)的 ImageData 对象。因此,使用几个数组已经占用了大量内存(高达 300MB)。有没有办法在不需要时释放某些数组的内存?我正在尝试将 undefined 分配给该变量。对吗?

最佳答案

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

例如,如果您有一个包含 10,000 个元素的数组保存在一个全局变量中:

var largeDataArray = new Array(10000);

并且,您已经用数据填充了大多数元素,然后您可以通过为其分配一些其他值来允许该内存符合垃圾回收条件,例如:

largeDataArray = null;

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

largeDataArray = [];

注意:本身超出范围的变量(例如不属于持久闭包的函数中的局部变量)或本身超出范围的对象中的变量不必手动清除。当它们超出范围或父对象被删除时,其中包含的数据也将符合垃圾回收条件。

因此,仅当您明确想要释放保存在持久变量中的数据时才需要清除变量,通常只有在数据很大或您有很多数据时才需要担心这一点它们加起来可达数兆字节的数据(与桌面浏览器相比,智能手机的内存使用在较低级别上更受关注)。

关于javascript - 如何释放 JavaScript 中的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8467350/

相关文章:

JavaScript:使用函数参数定义变量名

javascript - 在 JavaScript 中打印两个整数的更聪明的方法

php - 如何对wp_query的结果进行排序

c++ - 在 C++ 中正确使用堆栈和堆?

javascript - Handlebars 无法从 json 中选择数据

javascript - 使用脚本添加两个同名的数组值

php - 值未通过 ajax 将 session 数组更新为 json 数组

C++ 内存释放

C++ 内存泄漏 new 运算符

javascript - 为什么当输入类型改变时这个 d3 组件不起作用?