G1垃圾收集器简介
G1垃圾收集器偏向于多处理器运行,满足stw时间短的同时实现高吞吐量。
其特点包括:
- 堆大小高达数十GB或更大,其中超过50%的Java堆占用实时数据。
- 对象分配和升级的速率可能会随时间而显着变化。
- 堆中有大量碎片。
- 预测的stw不超过几百毫秒,避免了长时间的垃圾收集暂停。
G1在应用程序运行的同时执行其部分工作,尽管使用G1收集器的垃圾收集暂停通常很短,但应用程序吞吐量也往往会略微降低。
G1是默认收集器。
启用G1
可以通过 -XX:+UseG1GC在命令行上提供显式启用它.与其他收集器类似,G1将堆分成(虚拟的)年轻一代和老一代,垃圾回收主要集中在最有效的年轻一代.
堆布局
G1将堆划分为一组大小相等的堆区域,每个堆区域都有一个连续的虚拟内存范围,如图,区域是内存分配和回收的单位。在任何给定时间,这些区域中的每个区域都可以为空(浅灰色),或分配给特定的年龄段(年轻或年长)。随着内存请求的到来,内存管理器将释放可用区域。内存管理器将它们分配给一个代,然后把可用空间返回给应用程序。
年轻代包含伊甸园区域(红色)和幸存者区域(带有“ S”的红色)。这些区域提供的功能与其他收集器中相应的连续空间相同,不同之处在于,在G1中,这些区