
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
Java编程开发语言随着互联网的不断发展而被越来越多的程序员掌握,今天我们就通过案例分析来简单了解一下,Java编程G1回收流程包含哪些阶段。
G1的回收流程和CMS逻辑大致相同,分别进行初始标记、并发标记、重新标记、筛选清除,区别在后一个阶段G1不会直接进行清除,而是会根据设置的停顿时间进行智能的筛选和局部的回收。
阶段一:初始标记
初始标记额目的是先把所有GC Root直接引用的对象进行标记,因为需要避免在标记GC Root的过程还有程序在继续产生GC Root对象,所以这个过程是需要停止用户线程 ,因为这个过程并不会对整个GC Root的引用进行遍历,所以这个过程速度是非常快的。
阶段二:并发标记
并发标记阶段的工作就是把阶一段标记好的GC Root对象进行深度的遍历,找到所有与GC Root关联的对象并进行标记,这个过程中是采用多线程的方式进行遍历标记,对整个JVM 的GC Root进行遍历的过程是垃圾收集过程中耗时的一步,为了尽量不停顿用户线程,所以这个阶段GC线程会和用户线程同时运行,通过这样的方式减少用户线程的停顿时间。
阶段三:终标记
因为在上个阶段用户线程同时也在运行,用户线程运行的过程中又会产生新的垃圾,所以重新标记阶段主要任务是把上一个阶段中产生的新垃圾进行标记( 使用多线程标记),很显然这个过程是对上一个阶段用户线程运行遗留的垃圾进行标记,所以数量是非常少执行时间也是非常短的,当然为了避免这个过程再次产生新的垃圾,所以重新标记的过程是会停顿用户线程的。
阶段四:筛选回收
把存活的对象复制到空闲Region区域,再根据Collect Set记录的可回收Region信息进行筛选,计算Region回收成本,根据用户设定的停顿时间值制定回收计划,根据回收计划筛选合适的Region区域进行回收。
回收算法:从局部来说G1是使用的标记复制法,把存活对象从一个Region复制到另外的Region,但从整个堆来说G1的逻辑又相当于是标记整理法,每次垃圾收集时会把存活的对象整理到其他对应区域的Region里,再把原来的Region标记为可回收区域记录到CSet里,所以G1的每一次回收都是一次整理过程,所以也就不会产生空间碎片问题。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei456学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。