【JavaScript】JavaScript中的GC算法

1、内存管理

内存:由可读写单元组成,标识一片可操作的空间

管理: 认为的去操作一篇空间的申请、使用和释放

内存管理:开发者主动申请空间、使用空间、释放空间

管理流程: 申请-使用-释放

js 复制代码
// 申请
let obj = {}
//使用
obj.name = 'zs'
//释放
obj = null
2、JavaScript可达对象

可达对象表示

  • 可以访问到的对象就是可达对象(引用、作用域链)
  • 可达的标准就是从根触发是否能够呗找到
  • JavaScript中的根就可以理解为是全局变量对象
3、JavaScript中的垃圾
  • JavaScript中的内存管理是自动的
  • 对象不在被引用是是垃圾
  • 对象不能从跟上访问到的时候是垃圾
4、GC定义与作用
  • GC就是垃圾回收机制的简写
  • GC可以找到内存中的垃圾、并释放和回收空间
GC算法是什么

GC是一种机制,垃圾回收器完成具体的工作

工作的内容就是查找垃圾释放空间、回收空间

算法就是工作是擦护照和回收所遵循的规则

常见的GC算法

引用计数、标记清除、标记整理、分代回收

5、引用计数算法
  • 核心思想:设置引用数,判断当前引用书是否为o
  • 引用计数器,记录引用数值
  • 引用关系改变时修改引用数字
  • 引用数字为0时立即回收

优点

  • 发现垃圾是立即回收
  • 最大限度减少程序暂停

缺点

  • 无法回收循环引用的对象(因为引用数字不为0)
  • 时间开销大(需要维持引用计数器)
6、标记清除算法
  • 核心思想: 分标记和清除两个阶段完成
  • 遍历所有对象找标记活动对象(给可达对象做标记)
  • 遍历所有对象清除没有标记的对象

优点

  • 解决了引用计数算法中无法回收循环引用对象的缺点

缺点

  • 空间碎片化:由于当前回收的垃圾对象在地址上是不连续的,所以回收后空间分散再各个角落
7、标记整理算法
  • 标记整理算法可以看作是标记清除的增强
  • 标记阶段的操作和标记清除一直
  • 清除阶段回先执行整理,移动对象位置,整理到一起,进而减少碎片化空间
相关推荐
胡萝卜术2 小时前
滑动窗口最大值:从暴力到单调队列,层层优化全解析
前端·javascript·面试
kyriewen3 小时前
2026 年了,这 6 个 npm 包可以卸载了——浏览器原生 API 已经能替代
前端·javascript·npm
铁皮饭盒4 小时前
bun直接tsx,优雅!
javascript·后端
_柳青杨6 小时前
一文吃透 Node.js 事件循环:从原理到 Node 20+ 重大变更
javascript·后端
JieE21217 小时前
LeetCode 101. 对称二叉树|JS 递归 + 迭代双解法,彻底搞懂镜像判断
javascript·算法
冬奇Lab19 小时前
AI Workflow 定义的四次演进:从 Markdown 到 JS 脚本,再到分布式多 Agent
javascript·人工智能·agent
一颗烂土豆1 天前
Meshopt 压缩深度解析,为什么它比 Draco 更快
前端·javascript·webgl
kyriewen1 天前
同事每天催我 Code Review,我写了个脚本让 AI 替我 review PR——现在他反过来催 AI 了
前端·javascript·ai编程
weedsfly1 天前
迭代器、生成器与异步迭代——让数据“按需流动”的艺术
前端·javascript
假如让我当三天老蒯1 天前
前端跨域解决方案(学习用)
前端·javascript·面试