wiki
JVM 在进行 GC 设计时,会假设大多数的对象寿命周期都很短,GC 要尽快进行回收,其 4 种 GC 都是基于分代回收的:
- 串行 GC
- 并行 GC
- CMS GC
- G1 GC
1. 串行 GC
HotSpot 会使用单线程来进行垃圾回收。一般在服务器应用中不会使用。
- 适用 : 仅有单个处理器的计算器,或者是对 GC 效率没有要求,且空间较小(如:小于 100M)的 Java 应用比较有效
- 缺点 : GC 时,会冻结所有的应用程序线程
- 使用 :
-XX:+UseSerialGC
2. 并行 GC
与串行相比,采用多线程垃圾回收
- 缺点 : GC 时,会冻结所有的应用程序线程
- 使用 :
-XX:+UseSerialGC
3. CMS GC
CMS(concurrent-mark-sweep),也是一种并行 GC,但分为多个阶段处理,进行 GC 时,它会使用多个线程(concurrent)在堆中扫描被标记( mark) 的对象,然后进行清理(sweep)。它使用的是并发标记清理算法。
- 适用 : 一些长时间运行服务器应用,且堆内存小于 4GB
- 使用 :
-XX:+UseConcMarkSweepGC
4. G1 GC
G1(Garbage First),垃圾优先 GC,并发收集器,会利用多个后台线程来扫描堆,但和其他 GC 不同的是,它将堆内存划分为多个大小相等的 region。每个 region 可以在 1M - 32M,region 的具体大小取决于Heap的大小。
- 使用 :
-XX:+UseG1GC