1. 概念
- G1收集器(Garbage First)是从 JDK 1.7 u4 版本之后正式引入到Java的垃圾收集器,此类垃圾收集器主要应用在多CPU以及大内存的服务器环境下,这样可以极大地减少垃圾收集的停顿时间,以提升服务器的操作性能。引入此收集器的主要目的是为了在将来的某一个时间内可以替换掉CMS(Concurrent Mark Sweep)收集器。
2. G1区域划分
-
G1垃圾收集器采用的是区域化、分布式的垃圾收集器。其核心思想为将整个堆内存区域划分为大小相同的子区域(Region),在JVM启动时会自动设置这些子区域的大小(区域大小范围“1M~32M”,最多可以设置2048个区域,即支持的最大内存为“32M*2048=65536M”、64G内存),这样Eden、Survivor、Tenured就变为了一系列不连续的内存区域,也就避免了全内存区域的GC操作。
-
在G1中不再区分年轻代、老年代内存空间,所有的内存空间就一块,但是要划分出不同的子区域。
-
只扫描部分区域,比如某几块区域的大小没变(也就是内存中没有任何东西),就不需要扫描。