使用";新的";在Javascript中

Memory allocation using "new" in Javascript

本文关键字:quot Javascript 新的 使用      更新时间:2023-09-26

关于使用Javascript创建动态对象,我有一些基本问题。我知道浏览器会为JS中的任何"new"关键字分配内存空间。如果我的理解是正确的,那么我有以下疑问。

查询#1:关于"sample"函数内的两行内容,请参阅下面的注释。这是我的第一个问题。

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. 作为一名程序员,在JavaScript中,您无法控制堆栈或堆的分配。您可以创建位于内存中某处的对象或基本体。内部JS引擎(如V8或Spidermonkey(执行各种优化。一般来说,你可以把所有的东西都看作是堆起来的
  2. 要开始,您需要知道GC从未被引用的对象中释放内存。当您在代码中的某个地方持有对对象的引用时,它不会被销毁
  3. 浏览器(JS引擎(不会向您泄露内存分配抽象。您所指的错误可能是call stack exceeded,当调用过多函数时会发生这种情况(主要是由于递归(