欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Garbage-First Collector

程序员文章站 2022-05-13 14:46:00
...

JDK7 update4开始完全支持G1垃圾收集器,这是一款服务器型的垃圾收集器,针对大内存、多处理器的机器。G1在实现高吞吐量的同时尽可能的满足指定的GC暂停时间。整个堆的操作,比如全局的标记操作是和用户线程并发执行的。

堆被分成一组大小相等的区域,每一块区域都是连续的虚拟内存。G1执行一个并发的全局标记操作来确定堆中的哪些对象还存活着。全局标记阶段执行完成后,就可以确定哪个区域最空,首先清理最空(垃圾最多)的区域,往往能释放大量的内存。

G1从一个或多个需要回收的区域赋值对象到堆中的一个单独区域,在这个过程中会压缩和释放内存。为了减少暂停时间和增加吞吐量,这个过程在多处理器的机子上是并行执行的。

G1还采用了暂定预测模型来满足用户定义的暂停时间。需要注意的是G1不是一个实时的垃圾收集器,它只是尽可能的满足用户指定的时间,但不是绝对。G1会基于以前的数据收集来评估在满足用户指定暂停时间的前提下可以收集多少个区域。

G1的焦点是为用户运行需要大内存但是GC延迟有时间限制的应用提供一个解决方案。这里的大内存是6G及以上的内存,时间延迟低于0.5秒。有一下特征的应用程序适用G1:

1.       存活的对象占用了50%以上的堆大小

2.       不希望暂停时间超过0.5-1

3.       The rate of object allocation rate or promotion varies significantly(此句不太理解)

 

G1的命令行选项:

-XX:+UseG1GC

使用G1作为垃圾收集器

-XX:MaxGCPauseMillis=n

设置最大暂停时间

-XX:InitiatingHeapOccupancyPercent=n

触发G1并发收集的堆占用百分比,默认值45

-XX:NewRatio=n

New/old比例,默认值2

-XX:SurvivorRatio=n

Eden/survivor比例,默认值8

-XX:MaxTenuringThreshold=n

设置最大年龄,默认值15

-XX:ParallelGCThreads=n

并行阶段垃圾收集的线程数

-XX:ConcGCThreads=n

并发阶段垃圾收集的线程数

-XX:G1ReservePercent=n

保留的对大小占整个堆的百分比,默认值10

-XX:G1HeapRegionSize=n

每个区域的大小,最小1MB,最大32MB