美文网首页
GC各算法分析

GC各算法分析

作者: zzj0990 | 来源:发表于2020-12-26 21:18 被阅读0次

    算法的基础概念

    G1的介绍

    1. https://www.oracle.com/technical-resources/articles/java/g1gc.html
    • Card table(jvm的优化)
      由于做YGC时,需要扫描整个OLD区,效率非常低,所以JVM设计了CardTable, 如果一个OLD区CardTable中有对象指向Y区,就将它设为Dirty,下次扫描时,只需要扫描Dirty Card在结构上,Card Table用BitMap来实现


      屏幕快照 2020-12-25 下午2.55.15.png

      caed table 是上图中所有的card(是分页的)的集合,使用BitMap进行标记,BitMap中的每一bit位与card一一对应。

    • CSet


      屏幕快照 2020-12-25 下午5.14.22.png
    1. 收集的是那些card
    • RSet


      屏幕快照 2020-12-25 下午5.32.18.png

      1.是三色标记实现的关键

    1. ZGC没有这个引用(使用的是颜色指针 使用其中的3位进行标记)
    • 拓展 -> 阿里的多租户jvm
    1. 每租户单空间
      将jvm分割为好多的独立的空间,分配给某个租户使用
    2. session base gc
      以web app, session为单位相关的对象,一旦session 消失了,则将与之相关的对象进行gc,更高效
    • 新老年代的比例
    1. 5% ~ 60%
    2. 一般不需要手工指定
    3. 也不要手工指定,因为这是G1预测停顿时间的基准。动态的调整 自动的进行优化
    • 逻辑分代(4个)
    1. 伊甸区、幸存区、老年区、大对象区


      屏幕快照 2020-12-25 下午5.53.28.png

      上图的次数是由4位bit指定的(栈指针中 待确认)

    2. 大对象
      超过单个region的50%
      或跨多个region


      屏幕快照 2020-12-25 下午6.05.35.png
    • 触发GC条件


      屏幕快照 2020-12-25 下午6.06.35.png
    • 延伸
      如果G1产生FGC,你应该做什么?
    1. 扩内存
    2. 提高CPU性能(回收的快,业务逻辑产生对象的速度固定,垃圾回收越快,内存空间越大)
    3. 降低MixedGC触发的阈值,让MixedGC提早发生(默认是45%)
      MixedGC ~ CMS 流程很相似
      jdk10以前是串行的FGC 10以后是并行的,所以要尽量减少的FGC的发生

    ————————————————————
    坐标帝都,白天上班族,晚上是知识的分享者
    如果读完觉得有收获的话,欢迎点赞加关注

    相关文章

      网友评论

          本文标题:GC各算法分析

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