这里主要讲堆的数据回收,先上图
除了图上内容还有一点就是不管什么类型的垃圾回收器,都是差不多的处理流程:
1.扫描标记活动对象与非活动对象
2.非活动对象回收
3.整理内存碎片
例如调用fn会创建一个arr数组,并return arr,回收器会标记为活动对象, 当fn()执行完毕获得返回结果后,会标记为非活动对象,回收器下一次运行就会删除arr,并回收arr所占用的内存空间
fn = ()=>{ const arr = new Array(100) return arr }
个人理解,欢迎指正
参考浏览器垃圾回收机制与内存泄漏分析,大佬写的很详细,还谈及了闭包、内存泄漏以及甄别内存泄漏的方法