G1 垃圾回收 源码阅读01 CollectionSet

collectionSetChooser.cpp

G1垃圾回收器,把内存分成了一个个HeapRegion,所以这里按照每个HeapRegion的垃圾回收效率gc_efficiency进行排序

1.首先去掉不适用的portion

2.检查regions不为空

3.打印G1 堆region存活信息

4.循环每个HeapRegion,然后调用do_heap_region

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

增加一个堆区  HeapRegion

1.先判断该heapRegion是否为固定的,固定则不增加到垃圾收集集合collection set

2.校验heapRegion的类型应该是old类型

3.校验heapRegion的remember_set,必须是完成的

4.把hr加到regions列表

5.调用calc_gc_efficiency 计算该heapRegion的垃圾回收效率

计算gc效率的函数在heapRegion.cpp

1.获取g1_policy,也就是对应的g1 垃圾回收策略

2.然后根据g1策略,预测计算 young gc的回收时间

3.然后用回收的字节数 / 预测的回收时间 =  gc_efficiency, 这个值越大,回收效率越高

猜你喜欢

转载自blog.csdn.net/kuaipao19950507/article/details/106652392