• 黑马JVM总结(十七)


    (1)G1_简介

    下面介绍一种Grabage one的垃圾回收器,在jdk9的时候称为默认的回收器,废除了之前的CMS垃圾回收器,它的内部也是并发的垃圾回收器

    我们可以想到堆内存过大,肯定会导致回收速度变慢,因为要涉及到对象的复制、标记,内存过大,对速度会产生影响,划分为小的区域进行管理,可以进行一些优化,标记和复制的速度

    在jdk1.8还不是默认的额需要使用参数启动:-XX:+Use1GC

    -XX:G1HeapReginSize:设置区域的大小

    -XX:MaxGCPauseMillis:默认暂停目标

    (2)G1_新生代垃圾回收

    Young Collection:新生代的垃圾回收

    Young Collection+ Concurrent Mark:新生代的垃圾收集同时执行一些并发的标记

    Mixes Collection:混合收集

    三个阶段是一个循环的过程,开始时新生代的垃圾收集,当老年代的内存超过阈值啦,那么它会在新生代垃圾回收的同时进行一个并发的标记,等这个阶段完成以后进行一个混合收集(对新生代幸存区、老年代都来进行一个大规模收集),回收结束伊甸园的内存都被释放掉会再次进入新生代的回收过程

    新生代的工作流程:第一个阶段

    内存布局:

    Grabage one的垃圾回收器将堆内存划分为一个个大小相等的区域,每个区域都可以作为伊甸园,幸存区和老年代,刚开始区域都是白色的,表示时空闲的区域,我们类加载时新创建的对象,刚开始会分配到伊甸园区域绿色的E代表伊甸园区域,当伊甸园逐渐被占满时,会进行新生代的垃圾回收,会触发一个较短时间的Stop the World

    新生代的垃圾回收把这个幸存的对象 ,已复制的算法把它放到幸存区

    在工作一段时间,当幸存区的对象比较多了,或者幸存区的的对象寿命超过一定时间(大小),会再触发新生代的垃圾回收,幸存区的对象会晋升到老年代

    如果寿命不够年龄,会拷贝到另外一个幸存区去 

    (3)G1_新生代回收+CM

    下面 Grabage one的垃圾回收器垃圾回收的第二个阶段 CM指Current Mark并发标记

    我们进行垃圾回收的过程中需要进行初始标记和并发标记,初始标记呢我要找到哪些根对象,并发标记呢是从根对象触出发顺着引用链在找到其他的一些对象,初始标记是在新生代发生是就已经标记了

    当老年代占用对空间达到阈值时进行并发标记,并发标记不会影响到用户的工作线程

     

    E是伊甸园区  S是幸存区  O为老年代占有的区

    当老年代占用总去45%的时候就并发标记了

    (4)G1_混合回收

    Grabage one的垃圾回收器垃圾回收的第三个阶段

    E是伊甸园区会根据复制算法到幸存区中,幸存区的一些对象不够寿命的复制到另一个幸存区S,符合晋升条件的对象会晋升到一个老年代中去,这些属于新生代的回收,老年代的区域经过之前的并发标记阶段,发现一些对象也没用了,老年代也是采用复制算法把老年代中幸存对象复制到新的老年代区

    为什么没有把所有的箭头划到这个O区呢?因为这个垃圾回收器会根据最大暂停时间,有选择的进行一个回收,有的时候我们的堆内存太大了老年代的垃圾回收时间可能比较长,达不到我们设置的最大暂停时间,垃圾回收器呢会从老年代里找到回收价值最高的区,挑选一部分区 进行垃圾回收,

    复制的区域少了,就能达到最大暂停的时间,如果要复制的对象没那么多,最大暂停时间也可以达到,那么它会把所有的区都进行一个复制动作,复制一方面为了保留存活对象,一方面为了整理内存减少空间碎片

    最终标记这个阶段在并发标记过程中漏掉一些对象,并发标记的同时用户线程也在工作,改变对象的垃圾和引用都会对并发标记的结果产生影响,需要暂停一下,执行最终标记 

  • 相关阅读:
    Python学习基础笔记十三——函数
    【JavaEE初阶】 计算机是如何工作的
    伪原创文章生成器软件的崛起-哪个伪原创文章生成器软件好?
    来自鹅厂大神级架构师把Tomcat内核设计解析完了
    ASP.NET WebForm--事件
    计算机毕业设计 基于SpringBoot高校毕业与学位资格审核系统的设计与实现 Javaweb项目 Java实战项目 前后端分离 文档报告 代码讲解 安装调试
    Network Address Translation,网络地址转换技术
    Flink Data Transformation
    设计模式之简单工厂模式(学习笔记)
    【lesson12】进程地址空间初识
  • 原文地址:https://blog.csdn.net/dengfengling999/article/details/133030896