comparison src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp @ 3378:69293e516993

7041440: G1: assert(obj->is_oop_or_null(true )) failed: Error # Summary: During an evacuation pause clear the region fields of any concurrent marking task whose local finger points into the collection set as the values in the region fields will become stale. Clearing these fields causes the concurrent mark task to claim a new region when marking restarts after the pause. Reviewed-by: tonyp, iveresov
author johnc
date Tue, 17 May 2011 00:56:01 -0700
parents 2aa9ddbb9e60
children 053d84a76d3d
comparison
equal deleted inserted replaced
3377:2aa9ddbb9e60 3378:69293e516993
3321 // only iterate over these. (Since evacuation may add to the mark 3321 // only iterate over these. (Since evacuation may add to the mark
3322 // stack, doing more exposes race conditions.) If no mark is in 3322 // stack, doing more exposes race conditions.) If no mark is in
3323 // progress, this will be zero. 3323 // progress, this will be zero.
3324 _cm->set_oops_do_bound(); 3324 _cm->set_oops_do_bound();
3325 3325
3326 if (mark_in_progress()) 3326 if (mark_in_progress()) {
3327 concurrent_mark()->newCSet(); 3327 concurrent_mark()->newCSet();
3328 }
3328 3329
3329 #if YOUNG_LIST_VERBOSE 3330 #if YOUNG_LIST_VERBOSE
3330 gclog_or_tty->print_cr("\nBefore choosing collection set.\nYoung_list:"); 3331 gclog_or_tty->print_cr("\nBefore choosing collection set.\nYoung_list:");
3331 _young_list->print(); 3332 _young_list->print();
3332 g1_policy()->print_collection_set(g1_policy()->inc_cset_head(), gclog_or_tty); 3333 g1_policy()->print_collection_set(g1_policy()->inc_cset_head(), gclog_or_tty);
3333 #endif // YOUNG_LIST_VERBOSE 3334 #endif // YOUNG_LIST_VERBOSE
3334 3335
3335 g1_policy()->choose_collection_set(target_pause_time_ms); 3336 g1_policy()->choose_collection_set(target_pause_time_ms);
3337
3338 // We have chosen the complete collection set. If marking is
3339 // active then, we clear the region fields of any of the
3340 // concurrent marking tasks whose region fields point into
3341 // the collection set as these values will become stale. This
3342 // will cause the owning marking threads to claim a new region
3343 // when marking restarts.
3344 if (mark_in_progress()) {
3345 concurrent_mark()->reset_active_task_region_fields_in_cset();
3346 }
3336 3347
3337 // Nothing to do if we were unable to choose a collection set. 3348 // Nothing to do if we were unable to choose a collection set.
3338 #if G1_REM_SET_LOGGING 3349 #if G1_REM_SET_LOGGING
3339 gclog_or_tty->print_cr("\nAfter pause, heap:"); 3350 gclog_or_tty->print_cr("\nAfter pause, heap:");
3340 print(); 3351 print();