page contents

常用的垃圾收集器有哪些?

轩辕小不懂 发布于 2022-02-08 13:41
阅读 547
收藏 0
分类:Java开发
3004
Nen
Nen
- 程序员

1. Serial 收集器(复制算法)

新生代单线程收集器,标记和清理都是单线程,优点是简单高效。是 client 级别默认的 GC 方式,可以通过 -XX:+UseSerialGC 来强制指定。

2. Serial Old 收集器(标记-整理算法)

老年代单线程收集器,Serial 收集器的老年代版本。

3. ParNew 收集器(停止-复制算法)

新生代收集器,可以认为是 Serial 收集器的多线程版本,在多核 CPU 环境下有着比 Serial 更好的表现。

4. Parallel Scavenge 收集器(停止-复制算法)

并行收集器,追求高吞吐量,高效利用 CPU。吞吐量一般为 99%, 吞吐量= 用户线程时间 / (用户线程时间+GC线程时间)。适合后台应用等对交互

相应要求不高的场景。是 server 级别默认采用的GC方式,可用 -XX:+UseParallelGC 来强制指定,用 -XX:ParallelGCThreads=4 来指定线程数。

5. Parallel Old 收集器(标记-整理算法)

Parallel Old 收集器的老年代版本,并行收集器,吞吐量优先。

6. CMS(Concurrent Mark Sweep)收集器(标记-清除算法)

上,这种垃圾回收器非常适合。在启动 JVM 的参数加上“-XX:+UseConcMarkSweepGC”来指定使用 CMS 垃圾回收器。

CMS 使用的是标记-清除的算法实现的,所以在 GC 的时候会产生大量的内存碎片,当剩余内存不能满足程序运行要求时,系统将会出现

Concurrent Mode Failure,临时 CMS 会采用 Serial Old 回收器进行垃圾清除,此时的性能将会被降低。

7. G1

G1 收集器在后台维护了一个优先列表,每次根据允许的收集时间,优先选择回收价值最大的 Region(这也就是它的名字 Garbage-First的由来。

请先 登录 后评论