GC

作者: 策马踏清风 | 来源:发表于2020-09-28 21:34 被阅读0次

GC要关注的事情

  • where/which
  • When
  • How

垃圾回收器组合

垃圾回收器组合
  • 新生代的垃圾回收器几乎都是复制法,90%对象朝生夕死(minor gc)Eden区
  1. Serial新生代,复制算法,单线程,简单高效,适合内存不大的情况
  2. ParNew新生代,并行多线程,Serial的多线程版本,搭配CMS的首选
  3. Parallel Scavenge新生代,吞吐优先,类似ParNewServer级别多核机器默认方式,适用后台运算不需要太多交换的任务

吞吐量=运行用户代码时间/(运行用户代码时间+垃圾收集时间)
垃圾收集时间=垃圾回收频率*单词回收时间

  • 老年代
  1. Serial Old标记整理,单线程,Client模式默认
  2. Parallel Old标记整理,并行,配合Parallel Scavenge面向吞吐量的组合,使用吞吐量注重和cpu资源敏感场合
  3. CMS老年代,标记清除,并行和并发。尽可能缩短垃圾收集器时间占用,但是占用更多cpu以及内存碎片,浮动垃圾问题,注重服务器相应的场合,互联网后端主流
  4. G1新生代+老年代,并行并发,1.7后引入,采用分区回收,基本不牺牲吞吐量的前提下完成低停顿回收,可预测停顿。目标是取代CMS(采用分块,总体是标记整理,分区间是复制)

java -XX: +PrintCommandLineFlage -version查看jdk默认信息

指定垃圾回收器

-XX:+UseSerialGC新生代和老年代都是穿行收集器
-XX:+UseParNewGC新生代ParNew老年代Serial Old(关注停顿时间,适合用户交互)
-XX:+UseParallelGC新生代ParallerGC老年代Serial Old(吞吐量,关注用户代码执行的总比例)
-XX:UseConcMarkSweepGC新生代ParNew老年代CMS
-XX:+UseG1GC使用G1

其他

UseParallelGC的参数
-XX:MaxGCPauseMills最大停顿时间
-XX:GCTimeRatio吞吐量的倒数,即GC占用时间占用总时间的比例

ZGC

jdk11提供,的可拓展低延迟收集器

  • TB级别的堆
  • GC时间不超过10ms
  • 和G1相比,吞吐量降低不超过15%
  • 有色指针和内存屏障

G1

  • 垃圾优先,优先清理垃圾多的区域
  • 并行并发,分代收集。空间整合,整体是标记-整理,区域间是复制算法。没有空间碎片,可预测的停顿。
  • 初始标记,短暂停顿,仅仅标记一些GC Roots能直达的对象,速度很快
  • 根区域扫描,从新生代可以直接到达的老年代区域
    --XX:MaxGCPauseMillis指定目标最大停顿时间,G1尝试调整新生代和老年代比例,堆大小,晋升年龄
    --XX:ParallerGCThreadsGC工作线程数量

内存回收和分配策略

  • 对象优先进Eden区,Eden内存不足发生Minor GC
  • 大对象直接进老年代,大字符串和大的数组
  • -XX:PretenureSizeThreshreshold指定大于这个值直接进入老年代(默认0,即大对象不直接进入老年代)
  • 存活对象默认15岁进入老年代
    --XX:MaxTenuringThreshold指定进入老年代的年龄
  • 空间分配担保,survivor空间不够,只要老年代连续空间大于新生代对象的总大小或历次晋升平均大小,进行Minor GC否则Full GC

新生代配置

  • 新生代分为Eden区(80%)和survivor区(20%分为s1s2)
  • 新对象存放在Eden,上次存活的放在s1或s2中,gc时向s1或s2中转移
    --XX:NewSize/MaxSize高优先级
    --Xmn(NewSize=MaxNewSize)中
    --XX:NewRatio比例,低

jdk工具

  • jps列出当前电脑运行的进程id -q只要id -m传入main的参数 -l列出临时文件 -v列出虚拟机启动的显示参数
  • jstat虚拟机统计信息监控 -gc id time i每time毫秒打印一次gc信息,共i次
  • jinfojava配置信息工具
  • jmap内存映射
  • jstack堆栈跟踪
  • jConsole监控管理
  • VisualVM多合一故障处理

相关文章

网友评论

      本文标题:GC

      本文链接:https://www.haomeiwen.com/subject/chyjuktx.html