Print this page
Abort concurrent mark
@@ -346,11 +346,14 @@
// structures is detected
volatile bool _has_overflown;
// True: marking is concurrent, false: we're in remark
volatile bool _concurrent;
// Set at the end of a Full GC so that marking aborts
- volatile bool _has_aborted;
+ volatile bool _aborted_by_fullgc;
+ // Set at the end of a inital mark young GC if doesn't need to do concurrent mark
+ // so that marking aborts
+ volatile bool _aborted_by_initial_mark;
// Used when remark aborts due to an overflow to indicate that
// another concurrent marking phase should start
volatile bool _restart_for_overflow;
@@ -507,13 +510,15 @@
G1CMRootMemRegions* root_regions() { return &_root_regions; }
void concurrent_cycle_start();
// Abandon current marking iteration due to a Full GC.
- void concurrent_cycle_abort();
+ void concurrent_cycle_abort_by_fullgc();
void concurrent_cycle_end();
+ void concurrent_cycle_abort_by_initial_mark();
+
void update_accum_task_vtime(int i, double vtime) {
_accum_task_vtime[i] += vtime;
}
double all_task_accum_vtime() {
@@ -586,11 +591,13 @@
// If marking is not in progress, it's a no-op.
void verify_no_collection_set_oops() PRODUCT_RETURN;
inline bool do_yield_check();
- bool has_aborted() { return _has_aborted; }
+ bool aborted_by_fullgc() { return _aborted_by_fullgc; }
+ bool aborted_by_initial_mark() { return _aborted_by_initial_mark; }
+ bool has_aborted() { return aborted_by_fullgc() || aborted_by_initial_mark(); }
void print_summary_info();
void print_worker_threads_on(outputStream* st) const;
void threads_do(ThreadClosure* tc) const;