概念
垃圾回收器 GC 是一种内存回收系统,它代表应用程序来识别内存中什么部分已经不再使用。
C++ 中引入智能指针作为自动内存管理方法,通过拥有自动内存管理功能的指针对象来引用对象,使程序员不用太关注内存的释放,而达到内存自动释放的目的。这种方法是最广泛的做法,但是对程序开发者有一定的学习成本(并非语言层面的原生支持),而且一旦有忘记使用的场景依然无法避免内存泄露。
为了解决这个问题,后来开发出来的很多新语言都引入了语言层面的自动内存管理 ——也就是语言的使用者只用关注内存的申请而不必关心内存的释放。
内存释放由虚拟机(Virtual Machine)或运行时(Runtime)来自动进行管理。而这种对不再使用的内存资源进行自动回收的行为就被称为垃圾回收。
Java 的 JVM 就包含了 GC。
而 Go 标准工具链会提供一组运行时库,运行时库里就包含了 GC,会随所有应用程序一同发布。
管理目标
GC 主要针对 逃逸 (分配)到 堆 中的内存,并不会管理栈里的。
GC 类型
GC 成本
GC 需要在 CPU 时间成本和内存之间做取舍。这种取舍取决于多长久执行一次 GC 操作。换句话说就是这种取舍完全由 GC 频率来定义。 降低成本的方法就是 GC 管理的变量越少越好。