> 文章列表 > 垃圾回收(GC)

垃圾回收(GC)

垃圾回收(GC)

概念性东西

 1、垃圾

当一个对象没有任何的变量或属性对它引用,此时我们将永远无法对他操作,此时这个对象就变成了垃圾,存在堆内存中, 这种对象过多会占用大量的空间,导致程序运行变慢,所以这些垃圾必须要清理

2、垃圾回收

在JS中有自动的垃圾回收机制,会自动将这个对象销毁,我们不需要手动处理

对垃圾回收来说,我们做的唯一的一件事就是将不再使用的对象设置为null,标记他是空的,垃圾回收机制就会自动回收了

3.内存的生命周期:

        // 内存分配:变量的声明,系统自动分配内存

        // 内存使用:读取内存,使用变量、函数

        // 内存回收:使用完毕,垃圾回收器自动回收

4.垃圾回收机制的算法

引用计数法:跟踪被引用的次数,被引用+1,减少一个引用-1,次数为0,释放内存

标记清除法:从根部(JS中就是全局对象)定时扫描内存中的对象,凡是能从根部到达的,都是还需要的,不能从根部到达的,被标记不再使用,稍后进行回收

5.补充说明:内存泄露

1.全局变量一般不会回收(关闭页面回收)

2.一般情况下,局部变量的值,不用了,会被自动回收,函数执行完,里面的变量会被自动回收,但有可能回收不了,比如一个函数里,对象的互相引用,这样就造成内存无法释放,这样叫内存泄漏

 function fn() {let p1 = {name: 'nn',age: 5}let p2 = {name: 'xx',age: 5}p1.name = p2p2.age = p1
}
fn()