本文旨在 快速了解 G1垃圾收集器是什么,有什么特色,原理是什么,经常使用的配置参数有哪些,与CMS垃圾收集器相比有什么优点算法
废话不bb,正文开始!并发
G1 是一种面向服务端的垃圾收集器,应用在多核处理器和大容量内存环境中,在实现高吞吐量的同时,尽量的知足垃圾收集器的暂停时间要求。性能
像 CMS 收集器同样,能与应用程序线程并发执行。spa
整理空闲空间更快,
须要更多的时间来预测 GC 停顿时间,
不但愿牺牲大量的吞吐性能,不须要更大的 JAVA Heap。
复制代码
G1 收集器的设计目的是取代 CMS 收集器。线程
G1 垃圾收集器是一个有整理内存过程的垃圾收集器,不会产生不少内存碎片。
G1 的 Stop The World 更可控,G1 在停顿上添加了预测机制,用户能够指按期望的停顿时间。
复制代码
G1 是在 2012 年才在 jdk.1.7u4 中能够呀用,在 jdk9 中将 G1 变成默认垃圾收集器来代替 CMS。它是一款面向服务应用的收集器。设计
主要改变是 Eden、Survivor 和 Tenured 等内存区域再也不是连续的,而是变成了一个个大小同样的 region
每一个 region 从 1M 到 32M 不等,一个 region 有可能属于 Eden、Survivor 或者 Tenured 内存区域。
复制代码
一、Region 区域化垃圾收集器:最大好处是化整为零,避免全内存扫描,只须要按照区域来进行扫描便可。code
二、回收步骤,四步过程:cdn
初始标记:标记一下GC Roots能直接关联到的对象,须要停顿线程,但耗时很短
并发标记:是从GC Root开始对堆中对象进行可达性分析,找出存活的对象,这阶段耗时较长,但可与用户程序并发执行
最终标记:修正在并发标记期间因用户程序继续运做而致使标记产生变更的那一部分标记记录
筛选回收:对各个Region的回收价值和成本进行排序,根据用户所指望的GC停顿时间来制定回收计划
复制代码
-XX:UseG1GC对象
-XX:G1HeapRegionSize=n:设置G1区域的大小,值是2的幂blog
-XX:MaxGCPauseMillis=n:设置并行收集最大暂停时间
没有内存碎片 能够精确控制停顿