JVM-G1垃圾回收器:从入门到-到搬砖系列一:简介跟基础介绍
(一) G1(Garbage First Collection):简介
进入正题之前,我们首先聊聊这是一个什么类型的博客。阅读这一系列博客的作用,跟跟达到的实际效果是什么。
1.这是一个什么类型的文章?
本人最近一直在研究JVM,说实话,这东西内容多,知识资料也挺杂。如果作为一个刚刚入门,或者是只是有一点点工作经验的人来说,看那些知识断章的文章,或者是去看周志明老师的:《深入理解JVM》,说实话:是真的看完就忘记系列。当然也不是不推荐大家去看,而是说,作为一个小白同学,一下就去理解这么庞大的内容,并且从中扣细节,属实比较困难。到最后就变成了背概念,然后过不久就成了忘记牛逼知识系列了。
所以这篇文章的针对人群呢,就是有一点点java基础,然后又想开始深入理解底层jvm知识的人群。
2.阅读文章后达到的效果
1.首先为咱们理清G1垃圾回收器的整体脉络。
2.为我们工作中的jvm调优,提供理论基础,并且提供一些调优知识以及经验。
3.为我们面试中的jvm问答提供一个基本知识架构基础。做到问到不慌,心中有丘壑。
3.G1是什么?
G1全称:Garbage First Collection,翻译一下就是垃圾优先收集器。当然还有各种各样的一个七七八八的历史简介,大家百度一下五花八门的都有,我们就不在这详细的赘述了。
稍稍要谈一下G1的话,必然绕不开的就是CMS,所以我们就稍微拿两者来对比一下,来聊聊G1是什么。
1.G1 在我看来是继承CMS这个垃圾回收器的基础之上研发出来的。同样的并发垃圾收集器,大大减少了STW(Stop The World)时间。
2.他们两个的垃圾回收算法的核心思想都是空间换时间,但是G1相对于CMS来说做的更加优秀。
3.G1作为更先进的垃圾回收器,相对于CMS来说简化了更多的参数,让更多的工作交由G1本身动态设置,简化了开发人员的工作量跟学习成本。设置基本的简单的参数就能达到非常好的运行效果。
4.为什么学习G1
非常简单的一个原因,因为工作中用到了。JDK8作为现在所有互联网各大厂商大面积使用的版本,其中能用的的垃圾回收器无外乎三种:Parallel Scavenger、CMS、G1。其中以CMS跟G1 为最主要的两个类型,像我待过的几家公司,所有的都是这两个垃圾回收器。所以作为日常工作,还是面试,都必须了解甚至是熟练掌握这两个垃圾回收器的原理。
5.how?怎么去学G1?
在我看来,学习一门知识,首先观其脉络,知道其总体的架构思路。然后再细细掰其中的细节。这样能更快更好的理解细节的内容,以及为什么这样处理的原因。所以,接下来,我就会首先把G1所涉及到的部分基础知识,一一介绍。然后,讲G1的整个流程,最后再详细的掰开回收流程之中每个阶段的详细内容。
(二)G1脉络介绍(内存模型)
1.内存模型:
首先一图胜过前言万语,上一张G1内存模型图。
名词概念普及
Region: G1把堆内存分成一块块的小内存分区, 每块分区的大小为1~32M之间。如果你不设置分区大小(+XX:G1HeapRegionSize = N),默认大小:X=Head(堆内存大小)/ 2048,但是X大小,只能在2的幂次方中取(1,2,4,8,16,32),