src/share/vm/gc_implementation/g1/concurrentMarkThread.cpp
Print this page
rev 6670 : 8048085: Aborting marking just before remark results in useless additional clearing of the next mark bitmap
Summary: After concurrent mark abort due to Full GC G1 unnecessarily clears the next mark bitmap a second time concurrently. The Full GC mark abort procedure already did that. Before clearing the next mark bitmap, check whether mark abort occurred to avoid this work.
Reviewed-by: tbd
rev 6671 : imported patch bengt-fixes
rev 6672 : imported patch bengt-fixes2
*** 275,287 ****
}
}
// We now want to allow clearing of the marking bitmap to be
// suspended by a collection pause.
! {
SuspendibleThreadSetJoiner sts;
_cm->clearNextBitmap();
}
}
// Update the number of full collections that have been
// completed. This will also notify the FullGCCount_lock in case a
--- 275,291 ----
}
}
// We now want to allow clearing of the marking bitmap to be
// suspended by a collection pause.
! // We may have aborted just before the remark. Do not bother clearing the
! // bitmap then, as it has been done during mark abort.
! if (!cm()->has_aborted()) {
SuspendibleThreadSetJoiner sts;
_cm->clearNextBitmap();
+ } else {
+ assert(!G1VerifyBitmaps || _cm->nextMarkBitmapIsClear(), "Next mark bitmap must be clear");
}
}
// Update the number of full collections that have been
// completed. This will also notify the FullGCCount_lock in case a