关于V8内存回收的问题
先看下面两段代码;代码一会导致内存泄漏不被回收;代码二不会泄露。
之前一直以为两段代码都不会泄漏,因为unused未被引用,someMethod也没引用orginalThing,代码一确实泄漏了;我查看了相关资料,认为someMethod和unused都定义在同一函数内,它们有共同的lexical environment
,unused引用了originalThing,所以someMethod也引用了originalThing,导致代码一内存泄漏。
由于楼主没阅读V8源码看看详细,觉得仅凭猜测和看他人博客不放心,所以请懂得道友来说说lexical environment
时什么?以及相关的细节,感谢感谢!
代码一:
let theThing = null
let replaceThing = function () {
let originalThing = theThing
let unused = function () {
if (originalThing) { }
}
theThing = {
longStr: new Array(100000000).join('*'),
someMethod: function () { }
};
};
setInterval(replaceThing, 1000)
代码二:
let theThing = null
let replaceThing = function () {
let originalThing = theThing
let unused = function () {
if (originalThing) { }
}
theThing = {
longStr: new Array(100000000).join('*')
};
};
setInterval(replaceThing, 1000)