New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
GC 日志分析 - G1 – Garbage First(垃圾优先算法) #186
Labels
Comments
G1 – Garbage First(垃圾优先算法)Evacuation Pause: Fully Young(转移暂停:纯年轻代模式)
Concurrent Marking(并发标记)
阶段 1:Initial Mark(初始标记)。此阶段标记所有从 GC root 直接可达的对象。在 CMS 中需要一次 STW 暂停,但 G1 里面通常是在转移暂停的同时处理这些事情,所以它的开销是很小的
阶段 2:Root Region Scan(Root 区扫描)。此阶段标记所有从根区域可达的存活对象。根区域包括非空的区域,以及在标记过程中不得不收集的区域。因为在并发标记的过程中迁移对象会造成很多麻烦,所以此阶段必须在下一次转移暂停之前完成。如果必须启动转移暂停,则会先要求根区域扫描中止,等它完成才能继续扫描。在当前版本的实现中,根区域是存活的小堆区,也包括下一次转移暂停中肯定会被清理的那部分年轻代小堆区
阶段 3:Concurrent Mark(并发标记)。此阶段非常类似于 CMS:它只是遍历对象图,并在一个特殊的位图中标记能访问到的对象。为了确保标记开始时的快照准确性,所有应用线程并发对对象图执行的引用更新,G1 要求放弃前面阶段为了标记目的而引用的过时引用
阶段 4:Remark(再次标记):和 CMS 类似,这也是一次 STW 停顿,以完成标记过程。对于 G1,它短暂地停止应用线程,停止并发更新日志的写入,处理其中的少量信息,并标记所有在并发标记开始时未被标记的存活对象。这一阶段也执行某些额外的清理,如引用处理(参见 Evacuation Pause log)或者类卸载(class unloading)
阶段 5:Cleanup(清理)。最后这个小阶段为即将到来的转移阶段做准备,统计小堆区中所有存活的对象,并将小堆区进行排序,以提升 GC 的效率。所有不包含存活对象的小堆区在此阶段都被回收了
Evacuation Pause: Mixed(转移暂停: 混合模式)
|
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
The text was updated successfully, but these errors were encountered: