JVM进阶(九)——JAVA 年轻代收集器
【摘要】 #JAVA 年轻代收集器 继续上一篇博文所讲的,STW即GC时候的停顿时间,他会暂停我们程序中的所有线程。如果STW所用的时间长而且次数多的话,那么我们整个系统稳定性以及可用性将大大降低。 因此我们在必要的时候需要对虚拟机进行调优,调优的主要目标之一就是降低STW的时间,也就是减少Full GC的次数。那么这里我们从调优的角度来分析各个收集器的优势与不足。 ...
#JAVA 年轻代收集器
继续上一篇博文所讲的,STW即GC时候的停顿时间,他会暂停我们程序中的所有线程。如果STW所用的时间长而且次数多的话,那么我们整个系统稳定性以及可用性将大大降低。
因此我们在必要的时候需要对虚拟机进行调优,调优的主要目标之一就是降低STW的时间,也就是减少Full GC的次数。那么这里我们从调优的角度来分析各个收集器的优势与不足。
首先从作用于年轻代的收集器开始(采用复制的收集算法):
- Serial收集器:一个单线程收集器,在进行回收的时候,必须暂停其他所有的工作线程,直到收集结束。缺点:因为要完全暂停线程,所以用户体验不佳。但是由于新生代回收得较快,所以停顿的时间非常少,而且没有线程切换的开销,因此也简单高效。通过-XX:+UseSerialGC参数启用。
- ParNew收集器:这个是Serial收集器的多线程版本,适用于多核CPU的设备。但对于单核的设备来说,需要进行线程之间的切换,效率反而没有单线程的高。通过-XX:ParallelGCThreads参数限制收集的线程数,-XX:+UseParNewGC参数启用。
- Parallel Scavenge收集器:该收集器是我们文章中的所有例子的默认年轻代收集器。他的关注点和其他的收集器不同,其他的关注点是尽可能的缩短Full GC的时间。而该收集器关注的是一个可控的吞吐量。吞吐量=运行代码的时间/(运行代码的时间+GC的时间),通过参数-XX:MaxGCPauseMillis设置最大GC的停顿时间和-XX:GCTimeRatio 设置吞吐量的大小。-XX:+UseParallelGC参数启用。主要适合在后台运算而不需要太多交互的任务。
另外,可以通过-XX:+UseAdaptiveSizePolicy参数开启自适应调节策略,这样可以免去我们自己设置堆内存的一些细节参数,比如新生代内存大小,Eden与Survivor之间的比例等等。这个参数适合对内存手工优化存在困难的时候使用,他能监控系统当前的状态,动态的调整以达到最大的吞吐量。
这里我们只大概了解了下年轻代的收集器,下面一张图给大家总结一下:
![这里写图片描述](https://imgconvert.csdnimg.cn/aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTYxMjIwMjEwNjM2NzA1?x-oss-process=image/format,png) ![这里写图片描述](https://imgconvert.csdnimg.cn/aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTYxMjIwMjEwNzMzNDQ2?x-oss-process=image/format,png)
文章来源: shq5785.blog.csdn.net,作者:No Silver Bullet,版权归原作者所有,如需转载,请联系作者。
原文链接:shq5785.blog.csdn.net/article/details/61913430
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)