< prev index next >
src/share/vm/gc/g1/concurrentMarkThread.cpp
Print this page
rev 12289 : [mq]: iloop
@@ -154,13 +154,11 @@
// the "end" logging is inside the loop and not at the end of
// a scope. Mimicking the same log output as GCTraceConcTime instead.
jlong mark_start = os::elapsed_counter();
log_info(gc, marking)("Concurrent Mark (%.3fs)", TimeHelper::counter_to_seconds(mark_start));
- int iter = 0;
- do {
- iter++;
+ for (uint iter = 1; true; ++iter) {
if (!cm()->has_aborted()) {
G1ConcPhaseTimer t(_cm, "Concurrent Mark From Roots");
_cm->mark_from_roots();
}
@@ -176,15 +174,18 @@
CMCheckpointRootsFinalClosure final_cl(_cm);
VM_CGC_Operation op(&final_cl, "Pause Remark");
VMThread::execute(&op);
}
- if (cm()->restart_for_overflow()) {
- log_debug(gc, marking)("Restarting Concurrent Marking because of Mark Stack Overflow in Remark (Iteration #%d).", iter);
- log_info(gc, marking)("Concurrent Mark Restart due to overflow");
+
+ if (!cm()->restart_for_overflow() || cm()->has_aborted()) {
+ break;
+ }
+
+ log_info(gc, marking)("Concurrent Mark Restart due to overflow"
+ " (iteration #%u", iter);
}
- } while (cm()->restart_for_overflow());
if (!cm()->has_aborted()) {
G1ConcPhaseTimer t(_cm, "Concurrent Create Live Data");
cm()->create_live_data();
}
< prev index next >