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 @   qeDVuHG  阅读(984)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· Windows编程----内核对象竟然如此简单?
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
点击右上角即可分享
微信分享提示