参考: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、结语
虽然垃圾回收的算法还不能确保所有”不需要的对象都被清除“,但这也解决了部分内存溢出的情况。