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的由来。
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的由来。