1、整个major GC 过程中GC Roots 有哪些?
常见的GC Roots + 整个年轻代
2、并发标记阶段,用户线程与GC 线程并发,CMS如何保证存活对象的正确性?
三色标记算法,增量更新,写屏障
3、并发GC 过程出现老年代引用新生代的对象,怎么处理?
card table,dirty card
void post_write_barrier(oop* field, oop val) {
jbyte* card_ptr = card_for(field);
*card_ptr = dirty_card;
}
4、屏障
三色标记算法的屏障:
write_barrier(obj,field,newobj){
if(newobj.mark == FALSE){
newobj.mark = TRUE
push(newobj,$mark_stack)
}
*field = newobj
}
card table 的屏障:
void post_write_barrier(oop* field, oop val) {
jbyte* card_ptr = card_for(field);
*card_ptr = dirty_card;
}