最近刚开始研究垃圾回收,在试着回答饿了么大前端里的node内存释放相关的问题时,遇到了一些疑问:
let arr = [];
while(true)
arr.push(1);
无限增加的数组,这肯定是会爆掉内存的。
let arr = [];
while(true)
arr.push();
这个我觉得只是一直使用 arr
,导致 arr
不能被释放吧?
let arr = [];
while(true)
arr.push(new Buffer(1000));
这个是因为 Buffer
的大小小于8k,会先检查内存池是否已满,所以应该不会爆掉内存?
var theThing = null
var replaceThing = function () {
var originalThing = theThing
var unused = function () {
if (originalThing)
console.log("hi")
}
theThing = {
longStr: new Array(1000000).join('*'),
someMethod: function () {
console.log(someMessage)
}
};
};
setInterval(replaceThing, 1000)
这个是因为 unused
对 originalThing
进行了引用,所以每一个 unused
都形成了一个 originalThing
的作用域 replaceThing
的闭包,这个闭包不会被回收掉,所以会在内存中一直累积?
因为自己不是很确定,所以麻烦懂的小伙伴回答一下,谢谢!