|相 |描述 | -------------------------------------------------- -| -------------------------------------------------- ---------- |
| (1)初始标记(停止世界事件) |这是停止世界事件。使用G1,它可以搭载在普通的年轻GC上。标记幸存者区域(根区域),这些区域可能引用了旧世代的对象。 |
| (2)根区域扫描|扫描幸存者区域以获取旧一代的参考。在应用程序继续运行时会发生这种情况。必须先完成该阶段,然后才能生成年轻的GC。 |
| (3)并发标记|在整个堆中查找活动对象。在应用程序运行时会发生这种情况。这个阶段可以被年轻一代的垃圾收集中断。 |
| (4)备注(停止世界活动) |完成堆中活动对象的标记。使用一种称为快照快照(SATB)的算法,该算法比CMS收集器中使用的算法快得多。 |
| (5)清理(停止世界事件并发) |对活动对象和完全空闲的区域执行计费。 (环游世界)清理已记住的集合。 (停止世界)重置空白区域并将其返回到空闲列表。 (并发)|
| ()复制(停止世界事件)* |这是世界暂停撤离活动物体或将活动物体复制到新的未使用区域的站点。这可以用记录为“ [GC暂停(年轻)]”的年轻一代区域来完成。或记录为“ [GC暂停(混合)]”的年轻一代和老一代地区。 |
G1 Old Generation Collection Step by Step
With the phases defined, let's look at how they interact with the old generation in the G1 collector.
6. Initial Marking Phase
Initial marking of live object is piggybacked on a young generation garbage collection. In the logs this is noted as GC pause (young)(inital-mark).
** 初始标记阶段**
活物的初始标记背负于年轻一代的垃圾收集器上。 在日志中,这被标记为“ GC暂停(年轻)(斜体)”。
7. Concurrent Marking Phase
If empty regions are found (as denoted by the "X"), they are removed immediately in the Remark phase. Also, "accounting" information that determines liveness is calculated.
如果找到空白区域(如“ X”所示),则在“备注”阶段将其立即删除。 另外,计算确定活跃度的“会计”信息。
8. Remark Phase
Empty regions are removed and reclaimed. Region liveness is now calculated for all regions.
空区域将被删除并回收。 现在,将计算所有区域的区域活跃度。
9. Copying/Cleanup Phase
G1 selects the regions with the lowest "liveness", those regions which can be collected the fastest. Then those regions are collected at the same time as a young GC. This is denoted in the logs as [GC pause (mixed)]. So both young and old generations are collected at the same time.
G1选择“活度”最低的区域,这些区域可以被最快地收集。 然后在收集年轻GC的同时收集这些区域。 在日志中将其表示为“ [GC暂停(混合)]”。 因此,年轻人和老年人都被同时收集。
10.After Copying/Cleanup Phase
The regions selected have been collected and compacted into the dark blue region and the dark green region shown in the diagram.
选定的区域已被收集并压缩为图中所示的深蓝色区域和深绿色区域。
Summary of Old Generation GC
In summary, there are a few key points we can make about the G1 garbage collection on the old generation.
Concurrent Marking Phase
Liveness information is calculated concurrently while the application is running.
This liveness information identifies which regions will be best to reclaim during an evacuation pause.
There is no sweeping phase like in CMS.
Remark Phase
Uses the Snapshot-at-the-Beginning (SATB) algorithm which is much faster then what was used with CMS.
Completely empty regions are reclaimed.
Copying/Cleanup Phase
Young generation and old generation are reclaimed at the same time.
Old generation regions are selected based on their liveness.
旧版GC的摘要总之,关于旧一代的G1垃圾回收,我们可以提出一些关键点。
-并发标记阶段
--在应用程序运行时同时计算活动信息。
-此活动信息标识在疏散暂停期间最适合回收的区域。
-没有CMS中的清扫阶段。
-备注阶段
-使用开始快照(SATB)算法,该算法比CMS使用的算法快得多。
-完全回收空区域。
-复制/清理阶段
-同时回收年轻一代和老一代。
-根据地区的活跃度选择地区。
G1 是将来Oracle HotSpot的未来。
又开始卡了,图片放的太多了。哈哈哈哈。快结束了,坚持住。
G1的适合场景 G1 GC模式global concurrent marking 全局并行标记
G1只有 Young GC 和 Mixed GC
G1是不提供Full GC的
global concurrent marking G1 在运行过程中的主要模式并发阶段,指的是全局并发标记的阶段
混合模式,指的是 Mixed GC
Mixed GC的参数详解什么时候发生Mixed GC
由一些参数控制,另外也控制着哪些老年代Region会被选入CSet当中
垃圾占比已经超过此参数设定的值
上图描述了RSet的记录情况,存放各个引用关系。
RSet其实是一个Hash Tabella,key 是引用它的起始地址,value是一个集合,元素是card table 的index。
混合GC, 不仅进行正常的新生代垃圾收集,同时也回收部分后台扫描线程标记的老年代分区。
三色标记算法(黑白灰)在进行并发标记时出现的标记错误的情况。而出来的算法
被标记,意思是可达的对象。被标记的对象都不应该被回收掉,都不是垃圾。
没有被标记的才是垃圾。
三色标记算法在并发情况下的漏标问题分析。此时。C也不应该被垃圾回收。
SATB