Mercurial > hg > truffle
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() { |