JVM(Java虚拟机)内存管理的一个关键组成部分是垃圾回收器(Garbage Collector),它负责回收不再使用的内存空间,以便可以重新利用这些内存空间。JVM中的垃圾回收器有不同的实现方式和算法,本文将详细介绍几种常见的垃圾回收器及其特点。
1.Serial
收集器(复制算法
):
新生代单线程收集器,标记和清理都是单线程,优点是简单高效;
2.ParNew
收集器
(
复制算法
):
新生代收并行集器,实际上是
Serial
收集器的多线程版本,在多核
CPU
环境下有着比
Serial
更好的表现;
3.
Parallel Scavenge
收集器
(
复制算法
):
新生代并行收集器,追求高吞吐量,高效利用
CPU
。吞
吐量
=
用户线程时间
/(
用户线程时间
+GC
线程时间
)
,高吞吐量可以高效率的利用
CPU
时间,尽
快完成程序的运算任务,适合后台应用等对交互相应要求不高的场景;
4.Serial Old
收集器
(
标记
-
整理算法
):
老年代单线程收集器,
Serial
收集器的老年代版本;
5.Parallel Old
收集器
(
标记
-
整理算法
)
: 老年代并行收集器,吞吐量优先,
Parallel Scavenge
收
集器的老年代版本;
6.CMS(Concurrent Mark Sweep)
收集器(标记
-
清除算法): 老年代并行收集器,以获取最短回
收停顿时间为目标的收集器,具有高并发、低停顿的特点,追求最短
GC
回收停顿时间。
7.G1(Garbage First)
收集器
(
标记
-
整理算法
)
:
Java
堆并行收集器,
G1
收集器是
JDK1.7
提供的一
个新收集器,
G1
收集器基于
“
标记
-
整理
”
算法实现,也就是说不会产生内存碎片。此外,
G1
收
集器不同于之前的收集器的一个重要特点是:
G1
回收的范围是整个
Java
堆
(
包括新生代,老年
代
)
,而前六种收集器回收的范围仅限于新生代或老年代。
新生代收集器
:
Serial
、
ParNew
、
Parallel Scavenge
老年代收集器
:
CMS
、
Serial Old
、
Parallel Old
整堆收集器
:
G1