内存分配使用";新";在Javascript中
关于使用Javascript创建动态对象,我有几个基本问题。 我知道浏览器负责为JS中的任何“新”关键字分配内存空间。如果我的理解是正确的,那么我将逐一提出以下问题 查询#1:“示例”函数中的两行,请参考下面给出的注释。这是我的第一个问题内存分配使用";新";在Javascript中,javascript,object,creation,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 i
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的参考算法&标记和扫描算法
以及建议在不使用时将变量分配给变量,但不能对我们将在C++中遵循的标准有一个明确的概念。若堆栈中有变量a,那个么我就不必担心了
如果obj1实例不再可访问,或者说未标记或不再进一步引用它,它也会被GC清除吗
查询#3:浏览器在为使用“new”操作符创建的实例分配和释放内存方面是否有所不同。(我在chrome中只看到了堆分析器,与之相关的术语很少,但我也遇到了“堆栈外空间”错误。这是否意味着所有浏览器都会普遍使用堆栈和堆
请帮帮我;)
我很确定,在内存分配方面&GC
new
没有特殊意义,您的示例与varb={strDate:“}代码>在内存处理方面(除了原型链的额外空间),基本上所有内存分配都由浏览器处理,开发人员不关心。一旦对象不再使用(不再被引用),浏览器将自动对其进行垃圾收集。在某些浏览器中,当不再使用某个变量时,您可以通过将该变量设置为null
来帮助进行早期垃圾收集,尤其是一些较旧的浏览器(尤其是IE)。