gpt4 book ai didi

javascript - JS 垃圾回收 : Reference to object properties cause whole object to remain on Memory?

转载 作者:行者123 更新时间:2023-11-29 11:00:38 25 4
gpt4 key购买 nike

这个答案似乎是相关的,但我需要更具体的信息:Garbage collection: object properties

假设我有一个全局对象:

var myObj  {
'some prop' : null
};

和返回结果的 Ajax 调用(为耐心起见进行了简化):

result = {
prop1 : someObj,
prop2 : otherObj
}

考虑这个操作:

ajax.get('some url', function(result){
myObj['some prop'] = results.prop2
});

由于对象是通过引用分配的,而不是像基元那样复制,我担心整个 results 对象将保留在内存中,因为我的全局对象 myObj 现在有一个引用到其属性之一 (prop2)。

我想如果我运行太多的 Ajax 请求,这可能会成为数据泄漏的来源。

我不需要所有结果,只需要一些属性。我是否应该进行额外的工作,从结果中删除不需要的属性或克隆结果属性而不是分配?

我想知道浏览器垃圾收集器是否足够聪明来处理这个问题,和/或这不是真正的问题。

最佳答案

因为函数参数表示它的局部变量,在执行超出 Ajax 函数的作用域后,result 对象将变得毫无用处并且可以被释放。

但也有一些异常(exception),比如循环引用:

function f() {
var o = {};
var o2 = {};
o.a = o2; // o references o2
o2.a = o; // o2 references o

return 'azerty';
}

由于 Mark-and-sweep algorithm 以上代码会将 oo2 释放到垃圾收集器,除非您声明其中之一在函数的外部作用域中,并且可以从全局作用域访问它,因此垃圾收集器可以访问它(因此被视为需要的对象,因此不会从内存中删除)。

SOURCE

关于javascript - JS 垃圾回收 : Reference to object properties cause whole object to remain on Memory?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47765807/

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