我正在使用canvas及其ImageData对象,它包含大量数据(数百万个整数)。 因此,使用几个阵列已占用大量内存(最多300MB)。 有没有办法在没必要时释放某些阵列的内存? 我正在尝试将undefined分配给该变量。 这样对吗?

===============>>#1 票数:104 已采纳

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

例如,如果在全局变量中保存了10,000个元素数组:

var largeDataArray = new Array(10000);

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

largeDataArray = null;

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

largeDataArray = [];

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

因此,只有当你明确想要释放持久变量中保存的数据时才需要清除变量,并且通常只有在数据很大或你有很多数据添加时才担心这个问题。高达数兆字节的数据(智能手机上的内存使用率低于桌面浏览器)。

===============>>#2 票数:4

JavaScript具有自动内存管理功能。 包含不再引用的对象的内存将有资格进行垃圾回收,除非您有内存泄漏。 通常不需要手动将undefined分配给变量。

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

  ask by haynar translate from so

未解决问题?本站智能推荐:

1回复

如何删除JavaScript画布渲染上下文的状态堆栈?

我最近在JavaScript中使用<canvas>进行工作,发现了可能造成真正糟糕的“内存泄漏”(更像是内存爆炸)。 使用画布上下文时,您可以执行context.save()将绘图样式添加到“状态堆栈”,并使用context.restore()删除它。 (请参阅有关MDN上渲染上
1回复

如何正确释放JavaScript变量的内存?

我一直在处理一些客户端数据,这些数据总计可能高达100MB。 我一直在使用全局变量来存储数据,并且该变量在我的JS文件的顶部声明: 紧随定义之后,有一些函数可以将数据加载到此变量,例如: 然后一些操作将用一些新数据替换data.array。 我发现如果在加载新数据之前仅将nu
1回复

JavaScript中的奇数数组行为

我正在尝试使用JavaScript在画布上绘制盒子。 我的代码可以用,但是我在数组上遇到了麻烦。 假设我有一个称为map的多维数组,它的声明如下: var map = [ [0,1,1], [0,0,1], [0,1,1], ]; 其中1是一个框, 0是空白,但是当我运行代码时,
1回复

避免使用JavaScript中的某些坐标

我有一个10x10的网格,其中充满了某些坐标中的对象,而且我有一个角色需要从头到尾进行操作,但我想避免在到达终点的路线上出现某些坐标。 有人可以告诉我用Javascript处理此问题的最佳方法是什么。 另外,如果我要用数组中的障碍物初始化数组,我将如何最好地编写代码以避免那些特定的图。
4回复

JavaScript,内存:数组中的元素

出于好奇,我有一个简短的问题。 假设我有一个对象,该对象具有一个数组作为此属性this.arr = ["one", "two", "three", ...] ,并用n元素填充此数组。 如果我运行this.arr = [] ,所有这些元素将会发生什么。 它们是否被删除,保留在内存中,是否
1回复

JavaScript数组推送不是函数

我不知道问题出在哪里。 完整的代码在: fullCode 这是HTML部分: 当我开始绘画时,出现以下错误: TypeError:history.push不是函数 请帮我。 非常感谢你。
3回复

在JavaScript数组中分散数字

我有10+数字组成的数组。 它们代表圆上的坐标-以度为单位,即每个数字都在0到359.999999...之间359.999999... 我要解决的问题是,当我在项目上通过html5 canvas api将项目绘制在圆上时,有时它们会聚在一起,从而导致项目相互吸引。 因此,我想创建一
2回复

Javascript使用JCanvaScript在画布中加载图像

我正在使用JcanvaScript库来处理Html5画布,现在我想在我的Canvas中加载一些图像,但只有最后一次图像加载成功,我看不到任何其他图像,但最后一个,我不知道是什么我的代码错了。 这是代码
3回复

在JavaScript中将对象添加到多维数组

我有一个磁贴对象声明如下: 我有一个多维数组来存储许多这些平铺对象,我这样声明: 我遍历画布的长度,添加这些图块以填充屏幕,如下所示: 我的错误发生在行上: JavaScript控制台返回“ Uncaught TypeError:tile不是构造函数” 如何
1回复

使用JavaScript在Canvas上进行爆炸时遇到问题

我是新来的,是信息学学位课程的学生。 我下周要完成的其中一个项目的某些部分遇到了麻烦。 我们被要求做一个包含所有这些要求的项目。 全屏和webapp启用 触摸和鼠标事件 适当使用数组和函数 使用事件位置(pageX和pageY)影响画布元素的x和y行为