阿孜去面试-垃圾回收

191 阅读1分钟

Koshka_Kandi_Twirl_III_L.jpg >> js是使用垃圾回收的语言,执行环境在代码执行时管理内存。具体是怎么实现的?

<< 确定那些不会再使用的变量,间隔一定时间去自动运行回收。

现在主要是使用标记清理实现。标记并清除标记,上下文变量访问不到后,垃圾回收程序进行内存清理

function createPersion(name){
    let localPerson = new Object()
    localPerson.name = name
    return localPerson
}
let globalPerson = createPersion('duzi')
// 手动解除引用
globalPerson = null

以前用过引用计数,引用一次加1,如果引用的变量被其他值覆盖减1。垃圾回收程序运行时释放引用数为0的内存。因为像下面这样的问题

// 左脚踩右脚互相引用就永远是2
function problem(){
    let objectA = new Object()
    let objectB = new Object()
    obectA.someOtherObject = objectB
    objectB.someOtherObject = obectA
}