• 面经-虚拟机-JVM垃圾回收


    JVM垃圾回收

    GC和分代回收算法

    GC的目的:

    实现无用对象内存自动释放,减少内存碎片,加快分配速度。

    GC要点:

    1.回收区域是堆内存,不包括虚拟机栈,在方法调用结束会自动释放方法占用的内存。

    2.判断无用对象,使用可达性分析算法,三色表记法标记存活对象,回收未标记对象。

    3.GC具体的实现称为垃圾回收器

    4.GC大都采用分代回收思想,理论依据是大部分对象朝生夕死,用完就立刻可以回收,另有少部分对象会长时间存活,每次很难回收,根据这两类对象的特性将回收区域分为新生代和老年代,不同区域应用不同回收策略。

    5.根据GC的规模可分成Minor GC(小范围垃圾回收,新生代),Mixed GC(混合收集,新生代和部分老年代被回收),Full GC(全面回收,新生代与老年代内存全部不足,停顿明显)

    分代回收

    1.伊甸园eden,最初对象诞生在这里。与幸存区合称新生代。

    2.幸存区survivor,当伊甸园内存不足,回收的幸存对象到这里,分成from和to,采用标记复制法。

    3.老年代old,当幸存区对象熬过几次回收(最多15次),晋升到老年代(幸存区内存不足或大对象会导致提前晋升)。

    GC规模

    1.Minor GC(小范围垃圾回收):发生在新生代的垃圾回收,暂停时间短。

    2.Mixed GC(混合收集):新生代+老年代部分区域的垃圾回收,G1收集器特有。

    3.Full GC(全面回收):新生代+老年代完整垃圾回收,暂停时间长,应尽力避免。

    三色标记问题

    用三种颜色记录对象的标记状态。

    黑:已标记 灰:标记中 白:还未标记

     

     

     

     最后黑色对象保留,白色对象作为垃圾回收。

    并发漏标问题

    漏标问题-----记录标记过程中变化

    1.Incremental Update 增量更新

       1.监控所有的赋值动作。只要赋值发生,被赋值的对象就会被记录。然后进行重新标记。

    2.Snapshot At The Beginning,SATB 原始快照

       1.新加对象会被记录

       2.被删除引用关系的对象也被记录

    垃圾回收器

    Parallel GC 并行GC

    1.新生代eden内存不足发生Minor GC,标记复制算法STW

    2.老年代old内存不足发生Full GC,时间长,标记整理算法STW

    3.使用场景:注重吞吐量的应用程序(不注重响应时间)

    ConcurrentMarkSweep GC 并发标记GC

    1.老年代标记阶段并发标记,重新标记时需要暂停STW,并发清除。(标记+清除算法,有内存碎片)

    2.Failback Full GC。并发失败的时候会触发Full GC。

    3.使用场景:注重响应时间

    垃圾回收器G1

    1.响应时间与吞吐量兼顾

    2.将整个堆内存划分为多个区域,每个区域都可以充当伊甸园区、幸存区,老年代,专门用来存储大对象的空间。

    工作流程:

    1.新生代回收:伊甸园区空间不足,标记复制

    2.并发标记:老年代并发标记,重新标记时需要STW。

    3.混合收集:并发标记完成,开始混合收集,参与复制的有伊甸园、幸存区、老年区,其中老年区会根据暂停时间目标,选择部分回收价值高的区域,复制时STW

    4.Failback Full GC。

  • 相关阅读:
    【Chrome】chrome浏览器未连接到互联网
    2023年【金属非金属矿山(地下矿山)安全管理人员】考试内容及金属非金属矿山(地下矿山)安全管理人员考试报名
    Linux期末复习总结
    C++笔试题之n阶楼梯问题:每次只能走1阶或2阶,有多少种方法走完
    在Jetson Nano上安装Caffe
    更换Anaconda的下载源为国内源的办法
    mysql主从复制和读写分离
    如何书写Servlet代码及其运行原理
    新生儿黄疸:原因、科普和注意事项
    使用Vue-cli构建spa项目及结构解析
  • 原文地址:https://blog.csdn.net/LYly_B/article/details/126543326