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