JVM面试真题总结(八)

文章收录在网站:http://hardyfish.top/

文章收录在网站:http://hardyfish.top/

文章收录在网站:http://hardyfish.top/

文章收录在网站:http://hardyfish.top/

G1收集器如何划分堆内存?

G1收集器将整个堆划分成约 2048 个大小相同的独立 Region 区域

这些区域可以在逻辑上被划分为Eden区、Survivor区和Old区。

  • 与其他GC收集器不同的是,G1并不需要Eden区、Survivor区和Old区物理上连续存在
  • 而是可以分散在各个Region中。

每个Region都有一个用于垃圾回收的优先级,G1收集器会优先选择回收垃圾最多的Region

  • 这也是G1名字Garbage-First的由来。

G1收集器划分堆划分的好处是什么?

G1收集器重新划分了Java堆,主要是为了解决CMS收集器的一些问题,提高垃圾收集的效率

  • 以及更好地控制垃圾收集的停顿时间。

具体来说,有以下几点原因:

减少内存碎片

  • CMS收集器采用的是标记-清除算法,这样会导致大量的内存碎片。
  • 而G1通过将堆划分为多个大小相等的独立区域,可以更好地控制堆内存,避免出现大量内存碎片。

提高垃圾收集效率

  • G1收集器在后台维护了一个列表,记录了每个区域的垃圾对象的数量
  • 垃圾对象最多的区域会被优先回收,这样可以尽可能降低内存占用,提高效率。

控制垃圾收集的停顿时间

  • G1收集器在设计时就考虑到了暂停时间,它可以让用户指定最大的垃圾收集停顿时间
  • 然后系统会尽力保证按照用户的预期进行操作。

描述G1垃圾收集的工作过程

初始标记(initial mark)

  • 标记了从GC Root开始直接关联可达的对象。
  • STW(Stop the World)执行。

并发标记(concurrent marking)

  • 和用户线程并发执行,从GC Root开始对堆中对象进行可达性分析,递归扫描整个堆里的对象图,找出要回收的对象

最终标记(Remark)

  • STW,标记再并发标记过程中产生的垃圾。

筛选回收(Live Data Counting And Evacuation)

  • 制定回收计划,选择多个Region 构成回收集,把回收集中Region的存活对象复制到空的Region中
  • 再清理掉整个旧 Region的全部空间。需要STW。

比较CMS和G1垃圾收集器的异同点

区别一:使用的范围不一样

  • CMS收集器是老年代的收集器,可以配合新生代的Serial和ParNew收集器一起使用。

  • G1收集器收集范围是老年代和新生代。

    • 不需要结合其他收集器使用。

区别二:使用的算法不一样

  • CMS收集器是使用标记-清除算法进行的垃圾回收。

  • G1收集器使用的是标记-整理算法进行的垃圾回收。

区别三:CMS收集器和G1收集器的优劣性

  • CMS收集器以最小的停顿时间为目标的收集器,容易产生内存碎片。

  • G1收集器不会产生内存碎片。

区别四:垃圾回收的过程不一样

  • CMS收集器:初始标记→并发标记→重新标记→标记清楚

  • G1收集器:初始标记→并发标记→最终标记→筛选回收

相关推荐
前端架构师-老李35 分钟前
进入新岗位的第一课——潜龙勿用
职场和发展
小满、2 小时前
对象住哪里?——深入剖析 JVM 内存结构与对象分配机制
java·jvm·#java对象分配·#hotspot实现
小白程序员成长日记2 小时前
2025.11.08 力扣每日一题
算法·leetcode·职场和发展
蚂小蚁3 小时前
一文吃透:宏任务、微任务、事件循环、浏览器渲染、Vue 批处理与 Node 差异(含性能优化)
前端·面试·架构
笑我归无处3 小时前
强引用、软引用、弱引用、虚引用详解
java·开发语言·jvm
他们叫我一代大侠4 小时前
Leetcode :模拟足球赛小组各种比分的出线状况
算法·leetcode·职场和发展
snakecy4 小时前
信息系统项目管理师--论文case
大数据·学习·职场和发展·区块链
堕落年代4 小时前
JVM组件协同工作机制详解
jvm
uhakadotcom4 小时前
在使用cloudflare workers时,假如有几十个请求,如何去控制并发?
前端·面试·架构
AnRan08085 小时前
产业投资工作坊: 清洁能源赛道分析与投资实战
职场和发展·能源