# GC定义与作用
- GC就是垃圾回收机制的简写
- GC可以找到内存中的垃圾、并释放和回收空间
- GC中垃圾是什么 程序中不在需要实用对象
// a
function func() {
name = 'ls';
return `${name} id a coder`
}
const a = func();
console.log(name) // ls
// b
function func() {
const name = 'xz';
return `${name} id a teacher`
}
const a = func();
console.log(a);
# GC算法是什么
- GC是一种机制,垃圾回收器完成具体的工作
- 工作的内容就是查找垃圾释放的空间、回收空间
- 算法就是工作时查找和回收所遵循的规则
# 常见的GC算法
- 引用计数
- 标记清除
- 标记整理
- 分代回收
# 引用计数算法实现原理
引用计数核心思想:设置引用数,判断当前引用数是否为0
- 引用计数器
- 引用关系改变时修改引用数字
- 引用数字为0时立即回收
const user1 = {age: 11};
const user2 = {age: 22};
const user3 = {age: 33};
const nameList = [user1.age, user2.age, user3.age]
function fn() {
const num1 = 1;
const num2 = 2;
}
fn()
# 引用计数算法优点
- 发现垃圾时立即回收
- 最大限度减少程序暂停
# 引用计数算法缺点
- 无法回收循环引用对象
function fn() { const obj1 = {}; const obj2 = {}; obj1.name = obj2; obj2.name = obj1; } fn() - 时间开销大,资源消耗大
# 标记清除实现原理
核心思想:分标记和清除二个阶段完成
- 遍历所有对象找标记活动对象
- 遍历所有对象清除没有标记对象
- 回收相应的空间
优点: 可以回收循环循环引用的对象
缺点:容易产生碎片化空间,浪费空间;不会立即回收垃圾对象
# 标记整理算法实现原理
- 标记整理可以看到是标记清除的增强
- 标记阶段的操作和标记清除一致
- 清除阶段会先执行整理,移动对象位置
优点:减少碎片化空间
缺点:不会立即回收垃圾对象