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。