文章插图
G1(Garbage First)垃圾收集器是目前垃圾回收技术最前沿的成果之一 。
G1 同 CMS 垃圾回收器一样,关注最小时延的垃圾回收器,适合大尺寸堆内存的垃圾收集 。但是,G1 最大的特点是引入分区的思路,弱化了分代的概念,合理利用垃圾收集各个周期的资源,解决了其他收集及 CMS 的很多缺陷 。
官方推荐使用 G1 来代替 CMS 。
通过本篇,我们可以了解掌握 G1 收集器的基本概念、堆内存、回收流程、GC模式、推荐用例等核心知识 。
文章插图
目录
- G1 收集器概述
- G1 的堆内存算法
- 1. G1 之前的 JVM 内存模型
- 2. G1收集器的内存模型
- G1回收流程
- 1. G1 收集器的阶段(步骤)
- G1 的 GC 模式
- 1. YoungGC 年轻代收集
- 2. mixed gc
- G1 的推荐用例
G1(Garbage First) 垃圾收集器,是关注最小时延的垃圾回收器,也同样适合大尺寸堆内存的垃圾收集,官方推荐选择使用 G1 来替代 CMS。
1. G1 收集器的最大特点
- G1最大的特点是引入分区的思路,弱化了分代的概念 。
- 合理利用垃圾收集各个周期的资源,解决了其他收集器、甚至 CMS 的众多缺陷 。
- 算法: G1 基于标记--整理算法, 不会产生空间碎片,在分配大对象时,不会因无法得到连续的空间,而提前触发一次 FULL GC。
- 停顿时间可控: G1可以通过设置预期停顿时间(Pause Time)来控制垃圾收集时间避免应用雪崩现象 。
- 并行与并发:G1 能更充分的利用 CPU 多核环境下的硬件优势,来缩短 stop the world 的停顿时间 。
- CMS 中,堆被分为 PermGen,YoungGen,OldGen ;而 YoungGen 又分了两个 survivo 区域 。在 G1 中,堆被平均分成几个区域 (region),在每个区域中,虽然也保留了新老代的概念,但是收集器是以整个区域为单位收集的 。
- G1 在回收内存后,会立即同时做合并空闲内存的工作;而 CMS,则默认是在 STW(stop the world)的时候做 。
- G1 会在 Young GC 中使用;而 CMS 只能在 O 区使用 。
G1 垃圾收集算法,主要应用在多 CPU 大内存的服务中,在满足高吞吐量的同时,尽可能的满足垃圾回收时的暂停时间 。
在以下场景中,G1 更适合:
- 服务端多核 CPU、JVM 内存占用较大的应用(至少大于4G);
- 应用在运行过程中,会产生大量内存碎片、需要经常压缩空间;
- 想要更可控、可预期的 GC 停顿周期,防止高并发下应用雪崩现象 。
文章插图
- 新生代:伊甸园区 (eden space) + 2个幸存区
- 老年代
- 持久代 (perm space):JDK1.8 之前
- 元空间 (metaspace):JDK1.8 之后取代持久代
文章插图
2.1 G1 堆内存结构堆内存会被切分成为很多个固定大小区域(Region),每个是连续范围的虚拟内存 。
经验总结扩展阅读
- 官宣签名超有爱的 暗示自己恋爱的签名
- 独特而有个性的签名 超爱的简短签名又内涵
- 乐视超级电视怎么样 乐视x60有哪些优势
- 乐视50寸超级电视好吗 售价2499元
- 小米电视4a和4c哪个好 两者区别详解
- 等离子电视机好还是液晶电视机好 两者的区别详解
- 等离子电视机出故障怎么办 维修方法详解
- 图文全面详解 Kafka 架构和原理机制
- 无锡有什么好吃的小吃 无锡超经典的8种名小吃排行榜
- 室内耐阴的盆栽植物有哪些 超耐阴的8种室内植物排行榜