1. 介绍
GC(Garbage Collection)就是垃圾回收机制的简写
1.1 GC算法
-
GC是一种机制,垃圾回收器会完成具体的工作 - 工作的内容就是查找垃圾释放空间、回收空间
- 算法就是工作时查找和回收所遵循的规则
JavaScript中的垃圾:
JavaScript中内存管理时自动的
对象不再被引用时是垃圾
对象不能从根上访问到时是垃圾
1.2 例如:
-
程序中不再需要使用的对象
function fn() { name = 'lg'; console.log(`${name} is a coder`); } fn(); -
程序中不能再访问到的对象
function fn() { const name = 'lg'; console.log(`${name} is a coder`); } fn();
2. 引用计数算法
原理:通过一个引用计数器维护当前对象的引用数,然后判断该对象的引用值是否为0,如果为0,GC会对将所在的对象空间进行回收释放再使用
3. 标记清除算法
核心思想:分标记和清除两个阶段完成
1. 遍历所有对象将当前可达活动对象进行标记
/*
可达对象:
可以访问到的对象就是可达对象
可达的标准就是从根出发是否能够被找到
JavaScript中的根就可以理解为全局变量对象
*/
2. 遍历所有对象清除没有标记对象
3. 回收相应的空间
4. 标记整理算法
原理:
- 标记整理可以看作是标记清除的增强
- 标记阶段的操作和标记清除一致
- 清除阶段会先执行整理,移动对象位置,让地址上产生连续
5. 总结
| 优点 | 缺点 | |
|---|---|---|
| 引用计数算法 | 1. 可以即时回收垃圾对象 2. 减少程序卡顿时间 |
1. 无法回收循环引用的对象 2. 资源消耗较大 |
| 标记清除算法 | 可以回收回收循环引用的对象 | 1. 容易产生碎片化空间,浪费空间 2. 不会立即回收垃圾对象 |
| 标记整理算法 | 减少碎片化空间 | 1. 不会立即回收垃圾对象<br />2. 移动对象位置,回收效率慢 |