内存分配使用" new"在Javascript中

时间:2015-07-05 12:17:14

标签: javascript object creation

关于使用Javascript创建动态对象,我几乎没有什么基本问题。 我知道浏览器负责为任何新的'分配内存空间。在JS中找到的关键字。如果我的理解是正确的,那么我会逐一查询。

查询#1:请参阅下面给出的评论内容'示例'功能。这是我的第一个问题。

function sample() {
  var a = 5;      // is the memory allocated for variable 'a' in stack ?
  var b = new obj1(); // The object instance created for 'obj1' gets allocated in heap?
}

var obj1 = function() {
  this.strDate = "";
}

查询#2:一旦执行范围超出了函数sample(),浏览器引擎是否会释放为这两个变量分配的内存。我读过有关GC的参考算法&标记和扫描算法 并建议一旦不使用就将null分配给变量,但却无法像我们在C ++中那样对要遵循的标准有明确的认识。如果变量a存在于堆栈中,那么我不必担心 如果obj1实例不再可访问或说没有标记或没有进一步引用它,它是否也会被GC清除?

查询#3:浏览器在使用' new'创建的实例分配和释放内存方面有所不同。运营商。 (我之前只看过chrome中的堆分析器,而且还有很多与它相关的术语,但我也遇到了堆栈空间错误。这是否意味着所有浏览器都会普遍使用堆栈和堆栈?

请在这里帮助我;)

1 个答案:

答案 0 :(得分:3)

  1. 作为程序员,在JavaScript中,您无法控制堆栈或堆分配。您可以在内存中创建位于某处的对象或基元。内部JS引擎(例如V8或Spidermonkey)执行各种优化。通常,您可以将所有内容都视为存储在堆上。
  2. 要开始,您需要知道GC从未引用的对象中释放内存。当您在代码中的某个位置保留对象的引用时,它将不会被销毁。
  3. 浏览器(JS引擎)不会泄露内存分配抽象。您调用的错误可能是call stack exceeded,当调用太多函数时(主要是由于递归)会发生错误。