GC各算法分析

算法的基础概念

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的发生

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容