深入理解Java虚拟机(五)G1垃圾回收器

9. G1垃圾回收器
  • 特点:

    • 适合多CPU,大内存环境,能尽量缩短STW;
    • 整体上标记-整理算法,局部复制算法,无内存碎片
    • 把内存划分为独立的子区域,每个区域保留新生代和老年代的区别,但不要求内存连续,每个区域可随着G1运行改变自己的角色,垃圾回收时避免了全内存扫描;
  • 原理:
    在这里插入图片描述

    G1收集器将堆分割成多个子区域(默认2014个分区),每个区域大小为2的整数次幂(-XX:G1HeapRegionSize=n,1MB~32MB),只有逻辑上的分代概念,物理上不再隔离(每个分区都可能随G1的运行在不同代之间切换)。

    Eden区耗尽时触发垃圾回收,暂停所有进程,并形成连续内存块;

    • Eden区数据移动到Survivor区,若Survivor区空间不够,则Eden区数据全部晋升Old区;
    • Survivor区数据移动到新的Survivor区,部分数据晋升Old区;
    • 最后Eden区收集完,GC结束
  • 优点(与CMS相比)

    • 并发回收,整体上采用标记整理算法,局部采用复制算法。避免了全内存扫描,只需按照区域扫描;

    • 可以控制停顿时间,每次根据允许停顿的时间去收集垃圾最多的区域。

  • 开启参数: XX: +UseG1GC

发布了54 篇原创文章 · 获赞 11 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/dong_W_/article/details/104707328