void wspace_last_otf_marker_work( Conclctor *last_marker ) { GC *gc = last_marker->gc; gc_reset_dirty_set(gc); gc_set_barrier_function(WB_REM_NIL); //INFO2("gc.con.info", "<stage 6>all markers finish "); gc_con_update_stat_after_marking(gc); //calculate marked size gc_clear_rootset(gc); gc_prepare_sweeping(gc); state_transformation( gc, GC_CON_TRACE_DONE, GC_CON_BEFORE_SWEEP ); }
void wspace_mostly_con_final_mark( GC *gc ) { /*init the root set pool*/ pool_iterator_init(gc->metadata->gc_rootset_pool); /*prepare dirty object*/ gc_prepare_dirty_set(gc); /*new asssign thread may reuse the one just finished in the same phase*/ conclctor_set_weakref_sets(gc); /*start final mostly concurrent mark */ gc_ms_start_mostly_con_final_mark((GC_MS*)gc, mostly_con_final_marker_num); mostly_con_mark_terminate_reset(); gc_mostly_con_update_stat_after_final_marking(gc); gc_reset_dirty_set(gc); gc_clear_rootset(gc); gc_prepare_sweeping(gc); state_transformation( gc, GC_CON_TRACE_DONE, GC_CON_BEFORE_SWEEP ); }