Hotspot JVM下,parallel与concurrent的区别

转载于知乎

 

作者:Ted Mosby链接:https://www.zhihu.com/question/21535747/answer/144884632来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Hotspot JVM实现包括了Serial GC, Parallel GC, CMS, G1 GC 4套算法组合。下面来讲一讲这些算法组合分别包括了哪些算法。

1. Serial GC算法:Serial Young GC + Serial Old GC (实际上它是全局范围的Full GC),适用于小程序或低配置计算机系统;

2. Parallel GC算法:(并行的)Parallel Young GC + PS MarkSweep GC / (并行的)Parallel Old GC(全局范围的Full GC),选PS MarkSweep GC 还是 Parallel Old GC 由参数UseParallelOldGC来控制,适用于对吞吐量敏感的应用;

3. CMS算法:(并行的)ParNew(Young)GC + (并发的)CMS(Old)GC (piggyback on ParNew的结果/老生代存活下来的object只做记录,不做compaction)+ Full GC for CMS算法(应对核心的CMS GC某些时候的不赶趟,开销很大),适用于对延时敏感的应用;

4. G1 GC:(并行的)Young GC +(并行的)mixed GC(新生代,再加上部分老生代)+ Full GC for G1 GC算法(应对G1 GC算法某些时候的不赶趟,开销很大)。G1 GC中开销较大的object marking算法部分是跟applicaiton一起并发的,其开始到结束时间上甚至可以跨越好几次Young GC。适用于延时和吞吐量都有要求的应用,调教相对前述3中GC算法组合为烦。

上述组合描述已特别指出并行(parallel)还是并发(concurrent)。Hotspot JVM语境下,这两个概念是严格区分的。并行是指STW(stop-the-world)状态下的GC算法或部分算法的多线程运行;并发是指非STW状态下GC算法或部分算法跟applicaiton一起分享多个线程来运行。

posted @ 2017-03-12 21:58  qeDVuHG  阅读(980)  评论(0编辑  收藏  举报