comparison src/share/vm/gc_implementation/g1/concurrentMark.hpp @ 8788:e864cc14ca75

8009940: G1: assert(_finger == _heap_end) failed, concurrentMark.cpp:809 Summary: Skip reference processing if the global marking stack overflows during remark. Refactor and rename set_phase(); move code that sets the concurrency level into its own routine. Do not call set_phase() from within parallel reference processing; use the concurrency level routine instead. The marking state should only set reset by CMTask[0] during the concurrent phase of the marking cycle; if an overflow occurs at any stage during the remark, the marking state will be reset after reference processing. Reviewed-by: brutisso, jmasa
author johnc
date Tue, 19 Mar 2013 00:57:39 -0700
parents fa08949fe0cb
children 7b835924c31c
comparison
equal deleted inserted replaced
8787:fa08949fe0cb 8788:e864cc14ca75
489 489
490 // We do this after we're done with marking so that the marking data 490 // We do this after we're done with marking so that the marking data
491 // structures are initialised to a sensible and predictable state. 491 // structures are initialised to a sensible and predictable state.
492 void set_non_marking_state(); 492 void set_non_marking_state();
493 493
494 // Called to indicate how many threads are currently active.
495 void set_concurrency(uint active_tasks);
496
494 // It should be called to indicate which phase we're in (concurrent 497 // It should be called to indicate which phase we're in (concurrent
495 // mark or remark) and how many threads are currently active. 498 // mark or remark) and how many threads are currently active.
496 void set_phase(uint active_tasks, bool concurrent); 499 void set_concurrency_and_phase(uint active_tasks, bool concurrent);
497 500
498 // prints all gathered CM-related statistics 501 // prints all gathered CM-related statistics
499 void print_stats(); 502 void print_stats();
500 503
501 bool cleanup_list_is_empty() { 504 bool cleanup_list_is_empty() {