你必须明白的新生代垃圾回收:YoungGC

本文详细探讨了Java G1垃圾收集器中的Young GC过程,包括选择CSet、清理根集、处理RSet和对象复制四个关键步骤。在YGC期间,G1ParTask执行垃圾回收任务,确保STW时间尽可能短,优化应用性能。
摘要由CSDN通过智能技术生成

关注公众号:Java架构师联盟,每日更新技术好文

Young GC

前文提到,Young GC(以下简称YGC)是指新生代垃圾回收,下面将详细讨论G1的YGC过程。

选择CSet

YGC的回收过程位于 G1CollectedHeap::do_collection_pause_at_safepoint(),在进行垃圾回收前它会创建一个清理集CSet(Collection Set),存放需要被清理的Region。选择合适的Region放入CSet是为了让G1达到用户期望的合理的停顿时间。CSet的创建过程如代码清单11-2所示:

代码清单11-2 选择Region放入CSet

void G1Policy::finalize_collection_set(...) {
// 先选择新生代Region,用户期望的最大停顿时间是target_pause_time_ms
// G1计算出清理新生代Region的可能用时后,会将剩下的时间(time_remaining_ms)给老年代
double time_remaining_ms =
_collection_set->finalize_young_part(...);
_collection_set->finalize_old_part(time_remaining_ms);
}

G1的YGC只负责清理新生代Region,因此finalize_old_part()不会选择任何Region,所以只需要关注finalize_young_part()。finalize_young_part会在将所有Eden和Survivor Region加入CSet后准备垃圾回收。

G1在evacuate_collect_set()中创建G1ParTask,然后阻塞

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值