今天让我们从0开始了解G1 GC。
在开始之前,我们先探讨下为什么我们学习G1 GC。 要学习一些新知识,每个人可能都有不同的目的目标。 我认为学习G1GC对于Java工程师有如下收益。
-
成为更好的Java开发工程师,在遇到服务性能问题、GC问题时,能够通过了解到的G1知识快速定位、解决相关问题
-
在面试时GC问题也是常问的知识点,G1GC作为大多数工程师了解不是很多的知识领域,如果稍微深入理解,就能形成更大的领先优势,无论是被面试还是面试别人
-
学习G1中的优化技巧、原理,有机会能够举一反三应用到平时的工作设计中
-
满足自己的好奇心,了解一项事物背后的运行流程。
目前大多数人对于G1 GC的知识理解可能来自G1 GC论文、oracle官方文档、《深入理解Java虚拟机》书籍、网络文章等。 而其中一些内容可能已经过时或描述不全面,本文会尽量给大家带来更准确、全面的G1理解。
G1核心设计思路介绍
G1GC是Garbage First Garbage Collection的简写,G1读作G one或G 一都是可以的。 在jdk9之后的版本,G1已经成为默认的垃圾回收器。
在G1出现之前,服务端Java服务普遍使用CMS(并发标记清除回收器),在暂定时间、吞吐量等方面G1相比CMS有全面的优化, 所以jdk9之后CMS也已经从jdk代码中移除不能再使用。
那么CMS遇到了哪些问题呢?
这要从GC暂停时间开始说起,在JVM运行时,除了有mutator应用线程(我们写的业务代码)执行,还有JVM内部的一些代码在运行就包括了GC的线程。 mutator是GC领域对于应用代码的称