垃圾回收机制

参考:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Memory_Management

1、内存生命周期

分配你所需要的内存,你使用你所分配的内存,释放不需要的内存

2、给谁分配内存

对象,对象所包含的值,函数,函数表达式,数值。。。。

3、垃圾回收机制

3.1  种类:引用计数法,标记清除法。

3.2  引用计数法是把”对象是否被需要“简化定义为"对象是否被其他对象引用";

        如果一个对象被引用1次及以上,就不会被清除。

        缺点:如果两个对象相互引用或者自己引用自己,它们不会被清除,即使它们是在函数中;

3.3  标记清除法把”对象是否被需要“简化定义为"对象是否可被获取";

        假定设定一个根对象,在js中这个对象是window,从window找它引用的对象,

        被引用的对象又找它引用的对象,一直找下去,最后找到那些可以被找到的和不能被找到的,

        就把不能被找到的那些对象清除。

4、一些特殊情况

闭包中的变量以及闭包作用域不会被垃圾机制回收。

weakMap的键,weakSet的值是对对象的弱引用,垃圾回收机制中相当于没有引用。

5、结语

虽然垃圾回收的算法还不能确保所有”不需要的对象都被清除“,但这也解决了部分内存溢出的情况。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。