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

image-20210603235533638

  • 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)收集器(标记-清除算法)

高并发、低停顿,追求最短 GC 回收停顿时间,cpu 占用比较高,响应时间快,停顿时间短,多核 cpu 追求高响应时间的选择。

CMS 是英文 Concurrent Mark-Sweep 的简称,是以牺牲吞吐量为代价来获得最短回收停顿时间的垃圾回收器。对于要求服务器响应速度的应用上,这种垃圾回收器非常适合。在启动 JVM 的参数加上“-XX:+UseConcMarkSweepGC”来指定使用 CMS 垃圾回收器。

CMS 使用的是标记-清除的算法实现的,所以在 GC 的时候会产生大量的内存碎片,当剩余内存不能满足程序运行要求时,系统将会出现 Concurrent Mode Failure,临时 CMS 会采用 Serial Old 回收器进行垃圾清除,此时的性能将会被降低。

  • 7. G1

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

发表评论