当这个参数打开之后,就不需要手工指定新生代的大小,Eden和Survivor的比例,晋升老年代对象年龄等细节参数,虚拟机会根据当前系统的运行情况收集性能监控信息,动态调整这些参数以提供最合适的停顿时间或者最大的吞吐量。称为:GC自适应调节策略
Java垃圾收集器简介 |
垃圾收集器
新生代
Serial收集器
最基本,发展最悠久的单线程的收集器
垃圾收集时,必须暂停所有的工作线程
ParNew收集器
Serial收集器的多线程版本,使用多个线程进行垃圾收集
参数
-XX:ParallelGCThreads
限制垃圾收集的线程数
Parallel Scavenge收集器
关注点:可控吞吐量
吞吐量:CPU用于运行用户代码时间与总消耗时间的比值
提升用户体验,高效利用CPU
参数
-XX:MaxGCPauseMillis
控制最大垃圾收集停顿时间
-XX:GCTimeRatio
设置吞吐量大小
-XX:+UseAdaptiveSizePolicy
开关参数
当这个参数打开之后,就不需要手工指定新生代的大小,Eden和Survivor的比例,晋升老年代对象年龄等细节参数,虚拟机会根据当前系统的运行情况收集性能监控信息,动态调整这些参数以提供最合适的停顿时间或者最大的吞吐量。称为:GC自适应调节策略
老年代
Serial Old收集器
Serial收集器的老年代版本
Parallel Old收集器
Parallel Scavenge收集器的老年代版本
CMS(Concurrent Mark Sweep)收集器
以获取最短回收停顿时间为目标的收集器
基于标记-清除算法实现
收集过程
1、初始标记
标记GC Roots能直接关联到的对象
2、并发标记
进行GC Roots Tracing(追踪)
3、重新标记
修正并发标记期间因用户线程继续运作导致标记产生变动的那部分记录
4、并发清除
优点
并发收集
低停顿
缺点
对CPU资源非常敏感
无法处理浮动垃圾
收集结束时,有大量内存碎片产生
G1(Garbage-First)收集器
当今收集器发展的最新成果
特点
并行与并发
分代收集
空间整合
可预测的停顿