新生代,多线程,使用复制算法,是多线程的并行的收集器。
目标:达到一个可控的吞吐量(Throughput)。
吞吐量:CPU用于运行代码时间 与 CPU总消耗时间的 比
公式: 吞吐量 = 运行代码时间 / ( 运行代码时间 + GC时间)
虚拟机运行 100 分钟,GC用掉1分钟,则吞吐量为99%。 100 /(100 + 1) = 0.99
1.停顿时间越短越好
-XX:MaxGCPauseMillis: 最大GC停顿时间,最小可为0
-XX:GCTimeRatio: 吞吐量大小,1-100
2.停顿时间与空间成反比
停顿时间越短,则新生代的空间就越小。
通过减小新生代的空间,让里面的垃圾变少,从而加快了集速度。
原来:500MB 垃圾,10秒收集一次,每次停顿100毫秒
为了缩短时间,修改** -XX:MaxGCPauseMillis** 参数,使新生代空间变小,产生的垃圾就少了,停顿时间短了:
现在:300MB 垃圾,5秒收集一次, 每次停顿70毫秒。
那时问题来了,停顿时间下降了,但是频率高了,则吞吐量也跟着降下来了。
3.GC 时间占总时间的比例
GCTimeRatio 进行这个设置1-100之间,相当于吞量的倒数。
计算方法:
1.设置为 19 则: 1 / (1 + 19) = 5%,即最大 5% 的收集时间
2.设置为 99 则: 1 / (1 + 99) = 1%,即最大 1% 的收集时间