博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JVM(9)之 年轻代收集器
阅读量:7005 次
发布时间:2019-06-27

本文共 940 字,大约阅读时间需要 3 分钟。

  hot3.png

       继续上一篇博文所讲的,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://my.oschina.net/itommy/blog/1576676

你可能感兴趣的文章
《设计模式之禅》--代理扩展:强制代理
查看>>
复数系下常量乘向量的范数
查看>>
EXT2 文件系统
查看>>
Linux常见的进程调度算法
查看>>
Redis need tcl 8.5 or newer
查看>>
系统思维\结构思维
查看>>
[日常] 编写HTTP接口文档
查看>>
Android App开发技能图谱(转载)
查看>>
【转】Kotlin 和 Checked Exception
查看>>
Java基础-二进制以及字符编码简介
查看>>
树莓派GPIO控制RGB彩色LED灯
查看>>
T-SQL基础查询——单表查询
查看>>
Android中经常使用的bitmap处理方法
查看>>
ffmpeg超详细综合教程——摄像头直播
查看>>
Python3在指定路径下递归定位文件中出现的字符串
查看>>
iterm2退出时保存会话状态,下次打开恢复
查看>>
关于UNPIVOT 操作符
查看>>
图片人脸检测——OpenCV版(二)
查看>>
java字符编码转换
查看>>
DPDK virtio-user
查看>>