NOTE

1.1 GC

1. 什么是GC 针对堆内存的自动内存回收机制 2. 为什么需要GC 把程序员从手动free内存的工作中释放出来 2.1. GC的问题 2.1.1. 内存泄露 内存泄露.md 2.1.2. STW STW.md 3. 如何进行垃圾回收 3.1. GC触发 定时或者内存空间不足时 3.2. 垃圾回收

Garbage Collection / Runtime更新于 historical

这是历史学习笔记,可能存在过时或不完整的理解。

0. 版本说明(2026)

这是一篇早期的跨语言 GC 概念笔记。不同运行时和版本的 GC 触发条件、GC Root 定义与回收策略并不相同;“分代垃圾回收”是一类常见设计,不是所有垃圾回收器都必须采用。

1. 什么是GC

针对堆内存的自动内存回收机制

2. 为什么需要GC

把程序员从手动free内存的工作中释放出来

2.1. GC的问题

2.1.1. 内存泄露

内存泄露.md

2.1.2. STW

STW.md

3. 如何进行垃圾回收

3.1. GC触发

定时或者内存空间不足时

3.2. 垃圾回收

3.2.1. 引用计数法

每个对象都有一个计数器,有变量引用时+1,引用失效则-1。当计数器为0的时候则对其进行回收

优点:简单高效 缺点:无法解决循环引用的问题。循环引用是指A对象引用B对象,B对象又引用A对象,但是A,B对象已不被任何其他对象引用

3.2.2. 可达性分析

从GC Root出发,通过引用关系遍历对象图,能到达的不是垃圾 GC Root:全局变量、栈上的局部变量、寄存器上的变量

3.2.2.1. 标记清除

标记:从GC Root出发,标记所有可达的对象。未被标记的就是垃圾对象 清除:清除所有未被标记的对象 缺点:会产生内存碎片(不连续的内存空间), 需要分配较大的对象时,无法找到足够的连续内存空间。

3.2.2.2. 标记整理

标记:从GC Root出发,标记所有可达的对象。未被标记的就是垃圾对象 整理:把所有存活的对象移动到一边,对其他区域回收 优点:解决了内存碎片的问题 缺点:移动对象的成本较高

3.2.2.3. 复制

把内存空间分成两块,每次只使用其中一块,用完之后把存活的对象复制到另一块内存空间 优点:效率高,没有内存碎片 缺点:每次只能利用一半的空间

3.2.2.4. 分代垃圾回收

根据对象的存活时间把内存分成新生代和老年代 新生代的特点是每次回收只有少量对象存活,因此采用改进的复制算法 老年代的特点是有大量对象存活,采用标记清除、标记整理算法

4. GC调优

GC调优.md