Javascript中的垃圾收集

garbage collection in Javascript

本文关键字:Javascript      更新时间:2023-09-26

考虑这个多层嵌套的JavaScript对象。

function foo() {
    var channels = {
        2: {
            name: "station 1", 
            description: "station1",
            img: ["img1-a", "img1-b", "img1-c"]
        },
        3: {
            name: "station 2", 
            description: "station2",
            img: ["img2-a", "img2-b", "img2-c"]
        },
        4: {
            name: "station 3", 
            description: "station3",
            img: ["img3-a", "img3-b", "img3-c"]
        },
    };
    console.log(channels);          
};          
....                
// calling foo.
foo();

函数foo()返回后,所有嵌套的对象(即单个通道对象、字符串、数组imgimg数组中的字符串)是否都会被自动垃圾收集?

或者,我需要显式地遍历并"删除"每个对象吗?

取决于console.log中发生的情况。当然,在Chrome中,对channels对象的引用保留在控制台中,因此channels不能是GC’d。

删除console.log时,完整的channel对象将正确地进行GC处理,因为没有其他引用。

只要没有其他引用它们,它们就有资格获得GC。

它们应该是,是的,因为不再有对channels对象的引用,也没有包含它的闭包。

GC主要依赖于实现它的浏览器,所以不能保证它真的会实现。然而,delete对每个元素的处理都是过度的。

Javascript有自己的垃圾收集器,由浏览器的引擎(v8或其他版本)实现。您不必取消分配引用。一旦根超出范围,它们都将有资格使用gc。