选定所有年轻代里的Region,外加根据global concurrent marking统计得出收集收益高的若干老年代region。在用户指定的开销目标范围内尽可能选择收益高的老年代region。注意:Mixed GC不是full GC,它只能回收部分老年代的Region,如果mixed GC实在无法跟上程序分配内存的速度,导致老年代填满无法继续进行Mixed GC,就会使用serial old GC(full GC)来收集整个GC heap。所以我们可以知道,G1是不提供full GC的。
1. global concurrent marking
在G1 GC中,它主要是为Mixed GC提供标记服务的,并不是一次GC过程的一个必须环节
初始标记(initial mark,STW):它标记了从GC Root开始直接可达的对象。
并发标记(Concurrent Marking):这个阶段从GC Root开始对heap中的对象标记,标记线程与应用程序线程并行执行,并且收集各个Region的存活对象信息。<br>
重新标记(Remark,STW):标记那些在并发标记阶段发生变化的对象,将被回收。
清除垃圾(Cleanup):清除空Region(没有存活对象的),加入到free list。
第一阶段initial mark是共用了Young GC的暂停,这是因为他们可以复用root scan操作,所以可以说global concurrent marking是伴随Young GC而发生的。第四阶段Cleanup只是回收了没有存活对象的Region,所以它并不需要STW。
2. 拷贝存活对象