文件名称:
V8.md
所在目录:
docs / JavaScript
文件大小:
1.42 KB
下载地址:
文本预览:
# V8
## 垃圾回收机制
> 垃圾回收:将内存中不再使用的数据进行清理,释放内存空间。
>
> V8 将内存分为 **新生代空间** 和 **老生代空间**
### 新生代空间
> 用于存活较短的对象
* 又分为两个空间:from 空间和 to 空间
* Scavenge GC 算法:当 from 空间被占满时,启动 GC 算法
* 存活的对象从 from 空间转移到 to 空间
* 清空 from 空间
* from 空间和 to 空间互换
* 完成一次新生代 GC
### 老生代空间
> 用于存活较长的对象
* 从新生代空间转移到老生代空间的条件
* 经历一次以上 Scavenge GC 的对象
* 当 to 空间体积超过25%
* **标记清除算法**:标记存活的对象,未被标记的则被释放
* 增量标记:小模块标记,在代码执行间隙执行,GC 会影响性能
* 并发标记(最新技术):不阻塞 JS 执行
* **压缩算法**:将内存中清除后导致的碎片化对象往内存堆的一端移动,解决 **内存碎片化**
## 内存泄漏
* 意外的 **全局变量**:无法被回收
* **定时器**:未被正确关闭,导致所引用的外部变量无法被释放
* **事件监听**:没有正确销毁(低版本浏览器可能出现)
* **闭包**:会导致父级中的变量无法被释放
* **dom 引用**:dom 元素被删除时,内存中的引用未被正确清空
## 垃圾回收机制
> 垃圾回收:将内存中不再使用的数据进行清理,释放内存空间。
>
> V8 将内存分为 **新生代空间** 和 **老生代空间**
### 新生代空间
> 用于存活较短的对象
* 又分为两个空间:from 空间和 to 空间
* Scavenge GC 算法:当 from 空间被占满时,启动 GC 算法
* 存活的对象从 from 空间转移到 to 空间
* 清空 from 空间
* from 空间和 to 空间互换
* 完成一次新生代 GC
### 老生代空间
> 用于存活较长的对象
* 从新生代空间转移到老生代空间的条件
* 经历一次以上 Scavenge GC 的对象
* 当 to 空间体积超过25%
* **标记清除算法**:标记存活的对象,未被标记的则被释放
* 增量标记:小模块标记,在代码执行间隙执行,GC 会影响性能
* 并发标记(最新技术):不阻塞 JS 执行
* **压缩算法**:将内存中清除后导致的碎片化对象往内存堆的一端移动,解决 **内存碎片化**
## 内存泄漏
* 意外的 **全局变量**:无法被回收
* **定时器**:未被正确关闭,导致所引用的外部变量无法被释放
* **事件监听**:没有正确销毁(低版本浏览器可能出现)
* **闭包**:会导致父级中的变量无法被释放
* **dom 引用**:dom 元素被删除时,内存中的引用未被正确清空
点赞
回复
X