释放Javascript对象使用的内存

时间:2009-05-15 07:47:06

标签: javascript arrays garbage-collection

我应该自己释放分配的内存,还是有一种垃圾收集器?

在JavaScript中使用以下代码是否可以?

function fillArray()
{
  var c = new Array;
  c.push(3);
  c.push(2);
  return c;
}

var arr = fillArray();
var d = arr.pop()

感谢

3 个答案:

答案 0 :(得分:8)

引自Apple JavaScript Coding Guidelines

  

使用删除语句。无论何时你   使用new创建一个对象   声明,将其与删除配对   声明。这确保了所有   与对象关联的内存,   包括它的属性名称,是   可用于垃圾收集。该   删除语句将在更多内容中讨论   “释放物体。”

这表示您使用delete命令,然后允许垃圾收集器在您使用完毕后释放为Array分配的内存。 delete语句仅删除引用的要点值得注意,因为它与C / C ++中的行为不同,后者没有垃圾回收,delete立即释放内存。

答案 1 :(得分:3)

变量arrd将作为全局变量存在,并且在垃圾收集器收集之前一直存在。

变量将在全局对象上设置为属性,即浏览器环境中的window,但由于它们是使用var声明的,they will not be deletable from the global object.

在您的特定情况下,最佳操作方法可能是在完成变量后将null分配给变量。您可能还想考虑将其范围包含在函数中,并在该函数内执行您需要执行的操作。

答案 2 :(得分:2)

JavaScript中的内存管理是自动的,并且有一个垃圾收集器(GC)。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management

您无法明确删除变量darr,但您可以通过将变量设置为其他内容(例如null)来删除对其值的引用,以允许GC将它们从记忆中删除。

arr = null;
d = null;

请注意,delete关键字仅删除对象属性。