gpt4 book ai didi

javascript - 在 Javascript 中使用 "new"进行内存分配

转载 作者:行者123 更新时间:2023-11-29 19:24:46 24 4
gpt4 key购买 nike

关于使用 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 当调用太多函数时发生(主要是由于递归)。

关于javascript - 在 Javascript 中使用 "new"进行内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31230245/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com