并行: 并行描述的是多条垃圾回收器线程之间的关系,说明多个线程的协同工作,通常默认为此时用户线程处于等待阶段
并发:并发描述的是垃圾收集器线程和用户线程之间的关系,说明同一时间垃圾收集器线程与用户线程都在运行.
- 衡量垃圾收集器的三项最重要的指标是:内存占用(Footprint)、吞吐量(Throughput)和延迟(Latency),三者共同构成了一个“不可能三角”
三者总体的表现会随技术进步而越来越好,但是要在这三个方面同时具有卓越表现的“完美”收集器是极其困难甚至是不可能的,一款优秀的收集器通常最多可以同时达成其中的两项
内存占用
吞吐量:处理器用于运行用户代码的时间与处理器总消耗时间的比值
(吞吐量=(运行代码的时间)/运行代码的时间+垃圾回收的时间)
延迟(gc暂停时间相关,一般说的是单次延迟,总的延迟是吞吐量)
一、延迟,单次的延迟
单次的延迟关系到服务的响应时延,比如,在要求接口响应不超过100ms的服务里,单次的延迟目标必然不能超过100ms。
服务的响应时间目标,不应该是指100%时间的服务响应。服务不可能是100%可用的,通常,我们对于服务的响应延迟目标也不是100%可用时间内的。
实际应用中,我们可能会以99.9%时间内,延迟不超过100ms为目标。
对于G1,会有一些默认设置,以使应用者在不做任何调整的情况下,依然能高效的运行。
-XX:MaxGCPauseMillis=200:目标最大gc暂停时间,默认为200ms,这只是期望的目标延迟。我们知道G1有相应的收集算法,会根据收集的信息及检测的垃圾量动态的调整年轻代与老年代的大小以尽力达到这个目标。
使用此配置需要注意的一点是,不要和 Xmn 年轻代同时设置,我们上面提到过,G1会为了最大gc暂停时间目标而动态的调整年轻代大小,因此,如果设定了 Xmn,那么固定了年轻代的大小就会影响G1的智能调整适应。
二、吞吐量,有多少总的延迟
总的延迟关系到服务的可用时间率、吞吐量,比如,100分钟内总的gc延迟1分钟,那么服务的可用率就是99%。如果既定的目标是99.9%,那么总的延迟就不能超过6秒钟。
总的延迟=单次延迟*gc次数。
单次延迟我们在一.1中已经论述,那么现在就需要通过降低gc次数来达到降低总延迟的目标
网友评论