tt.triggerGC收藏我的收藏
收藏
我的收藏GC 介绍
内存分配的方式
要了解 GC 是如何工作的,首先要了解内存是如果分配的,目前存在三种内存分配方式:
分配方式 | 大小 | 管理方式 | 分配时间 | 缺点 |
静态分配 | 编译器决定,会比较大 | 无 | ["编译期间"] | 只能使用固定长度内存,不支持函数递归 |
栈分配 | 编译器决定,比较小 | 自动管理 | ["运行期间"] | 大小有限,容易堆栈溢出 |
堆分配 | 系统决定,可以很大 | 手动管理 | ["运行期间"] | 需要手动管理,容易内存泄漏 |
而我们所讨论的 GC 主要是基于堆的内存管理。
什么是 GC
简单说,GC 就是引擎用于管理内存的一种形式,GC 会试图回收我们不再使用的对象所占用的内存。对于 GC,一般而言只有两件事需要做,找到内存空间里面的垃圾,接着回收垃圾,让程序员能够再次利用这部分空间。
为什么需要关心 GC
首先需要明白,你不能去控制 GC 去强制回收某块内存。GC 是一个运行时程序。
诸如 C 这样的高 级语言,提供了 malloc() 或者 free() 这样的 API 要求程序员显示的分配或者释放内存,这种手动的方式相当麻烦,而且容易出错:要是你不小心释放了正在使用中的内存,你可能就会遇到由此引发的恶性 BUG。
而 JavaScript 是一门宽容的语言,JavaScript 是一门捆绑了 GC 的语言。
作为初学者,你可能只想要写出能够运行正常的代码。但随着你对程序语言的深入了解,你需要去关注 GC 的运行情况,确保你声明的对象在使用完毕后能够被 GC 回收,不会造成内存泄露。
若是你编写的程序想要以 60fps 的帧率运行,从而带来良好的用户体验,你需要去关注 GC 停顿造成的影响,这时候你可能会选择尽量避免 GC 的发生,或者减少 GC 停顿时间。