垃圾回收的认识
1. 什么是 GC,有什么作用?
GC
,全称 Garbage Collection
,即垃圾回收,是一种自动内存管理的机制。
2. 常见的 GC 实现方式有哪些?Go 语言的 GC 使用的是什么?
所有的 GC 算法其存在形式可以归结为追踪(Tracing)和引用计数(Reference Counting)这两种形式的混合运用。
-
追踪式 GC
从根对象出发,根据对象之间的引用信息,一步步推进直到扫描完毕整个堆并确定需要保留的对象,从而回收所有可回收的对象。Go、 Java、V8 对 JavaScript 的实现等均为追踪式 GC。
-
引用计数式 GC
每个对象自身包含一个被引用的计数器,当计数器归零时自动得到回收。因为此方法缺陷较多,在追求高性能时通常不被应用。Python、Objective-C 、Php等均为引用计数式 GC。
笔记:
逃逸分析是 Go 编译器在编译时进行的优化,通过分析变量的作用域,决定将其分配在栈还是堆上。
核心规则:如果变量在函数返回后仍被引用(如返回指针、被闭包捕获),则逃逸到堆;否则优先在栈分配。
价值:栈分配自动回收,减少 GC 开销,提升程序性能。