1. JavaScript 内存管理
1.内存:内存是由可读写单元组成,表示一片可操作的空间
2.管理:人为的去操作一片空间的申请、使用和释放
3.内存管理:开发者主动 申请空间 使用空间 释放空间
4.管理流程:申请-使用-释放
2. javaScript 垃圾回收
- 在JavaScript中 根===全局对象
- JavaScript中内存管理是自动的 那么什么被定义为垃圾?
1.对象不再被引用时是垃圾
2.对象不能从根上访问到时时垃圾
3.也就是说 没有了this指向的对象 和属性 就是垃圾)
2.1 可达对象
1.能访问到的对象就是可达对象(引用,作用域链)
2.可达的标准就是从根出发是否能被找到
3.GC算法
3.1 GC 定义和作用
GC就是垃圾回收机制的简写
GC可以找到内存中的垃圾 释放并回收空间
3.2 GC 中的垃圾是什么
程序中不再需要使用的对象
程序中不能再访问到的对象
3.3 GC算法是什么
1. GC是一种机制 垃圾回收器完成的具体工作
2. 工作内容就是 查找垃圾 释放空间 回收空间
3. 算法就是工作时查找和回收所遵循的规则
3.4 常见GC算法
3.4.1 引用计数
1.核心思想
设置引用数 判断当前引用数是否为0 为0 就开始工作 回收垃圾 释放空间 并回收空间
2.基本原理
根据引用计数器发现引用关系改变时 修改引用数字,引用数字为0时 立即回收
3.引用计数 优缺点
优点
可以及时回收垃圾对象
减少程序卡顿时间
缺点
无法回收循环引用的对象
对资源消耗比较大
3.4.2 标记清除
1.核心思想
主要分标记和清除两个阶段完成
2.基本原理
2.1.遍历所有对象 找到这些活动对象 并进行标记
2.2.遍历所有对象 清除没有被标记的对象 同时会把 上次标记的对象身上的标记清除 以便下次重新计算
2.3·回收相应的空间
3.标记清除 优缺点
优点
可以回收循环引用的对象
缺点
容易产生碎片化空间,浪费空间
不会立即回收垃圾对象 回收的时候 程序是停止运行的
3.4.3 标记整理
1.基本原理
1.1.标记整理可以看做是标记清除的增强
1.2.标记阶段的操作和 标记清除 是一样的
1.3.清除阶段会先执行整理 移动对象位置
2.标记整理 优缺点
优点
减少碎片化空间
缺点
不会立即回收垃圾对象 回收的时候 程序是停止运行的