JVM内存垃圾回收目前有多种算法,每种算法都有自己的特点和使用场景,本文主要介绍一下G1(Garbage-First)算法.G1是一款面向服务端应用的垃圾回收器,是SUN公司在JDK1.7中提出来的,初衷是替换JDK1.5中的CMS垃圾回收算法。G1之前的所有收集器都是对整个新生代或老年代进行垃圾回收,而G1不是这样:G1是将整个堆空间分成许多个大小不等的独立区域(Region),大约有2000块,每个Region从1M到32M大小不等,在JVM启动的时候就已经分割好了,Region可采用并行的垃圾回收或 NOT STW 方式。如下图所示:

Region被分成了Eden、survivor和旧生代Region。除此之外,其实还有第四类——大Region。此部分区域用来存放超过标准Region大小的50%或者更大的对象,此部分在内存中是连续的。不过oracle没有对这一部分的gc操作进行优化,不建议大家使用大Region。

本文详细介绍了G1(Garbage-First)垃圾回收算法,它是JVM的一种面向服务端应用的垃圾回收器,旨在替代CMS。G1将堆划分为多个不等大小的Region,并允许并行或非STW方式进行垃圾回收。文章涵盖了G1的年轻代和老年代GC过程,包括初始标记、根区扫描、并发标记、重新标记、清除回收和对象复制等步骤,强调了其并发性和STW停顿的特点。
最低0.47元/天 解锁文章
1130

被折叠的 条评论
为什么被折叠?



