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. 移动对象位置,回收效率慢 |
网友评论