深入理解JVM(学习过程) (38)

|相 |描述 | -------------------------------------------------- -| -------------------------------------------------- ---------- |
| (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

img

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

img

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

img

Empty regions are removed and reclaimed. Region liveness is now calculated for all regions.

空区域将被删除并回收。 现在,将计算所有区域的区域活跃度。

9. Copying/Cleanup Phase

img

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

img

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垃圾收集器深度理论讲解

G1 是将来Oracle HotSpot的未来。

又开始卡了,图片放的太多了。哈哈哈哈。快结束了,坚持住。

image-20200219113229630

G1的适合场景

image-20200219114045574

G1 GC模式

image-20200219114251559

global concurrent marking 全局并行标记

G1只有 Young GC 和 Mixed GC

image-20200219114650369

G1是不提供Full GC的

global concurrent marking

image-20200219114855269

image-20200219114951967

image-2020021911215242055

G1 在运行过程中的主要模式

image-20200219115340259

并发阶段,指的是全局并发标记的阶段

混合模式,指的是 Mixed GC

image-20200219115414291

Mixed GC的参数详解

什么时候发生Mixed GC

由一些参数控制,另外也控制着哪些老年代Region会被选入CSet当中

image-20200219115622574

image-20200219120006252

垃圾占比已经超过此参数设定的值

image-20200219120325434

image-20200219120446748

image-20200219132227828

image-20200219132242454

image-20200219132409136

image-20200219132524622

image-20200219143018081

上图描述了RSet的记录情况,存放各个引用关系。

image-20200219143202741

image-20200219143332001

image-20200219143456786

image-20200219143645002

RSet其实是一个Hash Tabella,key 是引用它的起始地址,value是一个集合,元素是card table 的index。

image-20200219143722790

image-20200219143756710

混合GC, 不仅进行正常的新生代垃圾收集,同时也回收部分后台扫描线程标记的老年代分区。

image-20200220115905110

image-20200219143913072

image-20200219144024812

三色标记算法(黑白灰)

在进行并发标记时出现的标记错误的情况。而出来的算法

image-20200219144118388

image-20200219144710680

被标记,意思是可达的对象。被标记的对象都不应该被回收掉,都不是垃圾。

没有被标记的才是垃圾。

image-20200219153141626

image-20200219153306004

image-20200219153535527

三色标记算法在并发情况下的漏标问题分析。

image-20200219153753559

image-20200219153817891

image-20200219153905751

image-20200219154029727

此时。C也不应该被垃圾回收。

SATB

image-20200219155752707

image-20200219155817076

深入理解JVM(学习过程)

image-20200219161048878

image-20200219161124751

image-20200219161837501

image-20200219162107459

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpfdfy.html