Пример #1
0
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 );
}
Пример #2
0
void wspace_last_mc_marker_work( Conclctor *last_marker ) {
   
   GC *gc = last_marker->gc;
   if( gc->gc_concurrent_status != GC_CON_TRACING )
   	return;
   
   gc_con_update_stat_after_marking(gc); //calculate marked size
    //just debugging
   Con_Collection_Statistics *con_collection_stat = gc_ms_get_con_collection_stat((GC_MS*)gc);
   con_collection_stat->marking_end_time = time_now();
   int64 con_marking_time = con_collection_stat->marking_end_time - con_collection_stat->marking_start_time;
   INFO2("gc.scheduler", "[MOSTLY_CON] con marking time=" << con_marking_time << " us");

   state_transformation( gc, GC_CON_TRACING, GC_CON_TRACE_DONE );
   //INFO2("gc.con.info", "<new state 3> first marking thread finished its job, GC is waiting for all the marking threads finish, current marker num is [" << gc->num_active_markers << "]" );
}