JavaScript中的垃圾回收(GC)?

垃圾回收(GC)是自动内存管理的一种形式。垃圾收集器(或只是垃圾收集器)尝试回收垃圾或程序不再使用的对象所占用的内存。自动确定是否“不再需要”某些内存的一般问题无法确定。结果,垃圾收集器实现了对一般问题的解决方案的限制。

垃圾回收算法所依赖的主要概念是引用的概念。在内存管理的上下文中,如果一个对象可以(隐式或显式)访问另一个对象,则称该对象引用另一个对象。

示例

let a = []
function addToA() {
   let x = {name: "John"}
   a.push(x)
}
console.log(a[0])

输出结果

{name: "John"}

请注意,x不在范围内,但仍可以使用a进行访问。这意味着它需要保留在内存中,直到不再存在其引用为止。如果我们从数组中弹出它,则不再需要它,可以对其进行垃圾回收。

垃圾收集器使用以下算法工作-

1.引用计数垃圾收集-称一个对象为“垃圾”,如果指向零的引用指向该对象,则该对象是可收集的。在较旧的浏览器中使用。但这会导致循环引用对象出现问题,因为无法收集它们(总是有另一个对象对它们的引用。)

2.扫掠算法-该算法将“不再需要对象”的定义简化为“对象不可到达”。该算法假定了解一组称为根的对象。在JavaScript中,根是全局对象。GC会定期从这些根目录开始,递归查找从这些根目录引用的所有对象。因此,从根开始,GC将查找所有可到达的对象并收集所有不可到达的对象。

您可以在https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Memory_Management中使用javascript阅读有关GC的更多信息。