mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-27 06:45:07 +02:00
6919638: CMS: ExplicitGCInvokesConcurrent misinteracts with gc locker
GC-locker induced concurrent full gc should be asynchronous; policy now controlled by a separate flag, which defaults to false. Reviewed-by: jmasa
This commit is contained in:
parent
643553d0e6
commit
d14cf2e13c
5 changed files with 14 additions and 9 deletions
|
@ -163,6 +163,7 @@ void VM_CMS_Final_Remark::doit() {
|
|||
// GenCollectedHeap heap.
|
||||
void VM_GenCollectFullConcurrent::doit() {
|
||||
assert(Thread::current()->is_VM_thread(), "Should be VM thread");
|
||||
assert(GCLockerInvokesConcurrent || ExplicitGCInvokesConcurrent, "Unexpected");
|
||||
|
||||
GenCollectedHeap* gch = GenCollectedHeap::heap();
|
||||
if (_gc_count_before == gch->total_collections()) {
|
||||
|
@ -190,7 +191,7 @@ void VM_GenCollectFullConcurrent::doit() {
|
|||
CMSCollector::disable_icms();
|
||||
// In case CMS thread was in icms_wait(), wake it up.
|
||||
CMSCollector::start_icms();
|
||||
// Nudge the CMS thread to start a concurrent collection
|
||||
// Nudge the CMS thread to start a concurrent collection.
|
||||
CMSCollector::request_full_gc(_full_gc_count_before);
|
||||
} else {
|
||||
FullGCCount_lock->notify_all(); // Inform the Java thread its work is done
|
||||
|
@ -231,7 +232,9 @@ void VM_GenCollectFullConcurrent::doit_epilogue() {
|
|||
// e.g. at the rate of 1 full gc per ms, this could
|
||||
// overflow in about 1000 years.
|
||||
GenCollectedHeap* gch = GenCollectedHeap::heap();
|
||||
if (gch->total_full_collections_completed() <= _full_gc_count_before) {
|
||||
if (_gc_cause != GCCause::_gc_locker &&
|
||||
gch->total_full_collections_completed() <= _full_gc_count_before) {
|
||||
assert(ExplicitGCInvokesConcurrent, "Error");
|
||||
// Now, wait for witnessing concurrent gc cycle to complete,
|
||||
// but do so in native mode, because we want to lock the
|
||||
// FullGCEvent_lock, which may be needed by the VM thread
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue