src/share/vm/gc_implementation/concurrentMarkSweep/vmCMSOperations.cpp
Print this page
*** 190,207 ****
(GC_locker::is_active() /* gc may have been skipped */
&& (_gc_count_before == gch->total_collections())),
"total_collections() should be monotonically increasing");
MutexLockerEx x(FullGCCount_lock, Mutex::_no_safepoint_check_flag);
if (gch->total_full_collections() == _full_gc_count_before) {
! // Disable iCMS until the full collection is done.
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.
CMSCollector::request_full_gc(_full_gc_count_before);
} else {
FullGCCount_lock->notify_all(); // Inform the Java thread its work is done
}
}
bool VM_GenCollectFullConcurrent::evaluate_at_safepoint() const {
--- 190,211 ----
(GC_locker::is_active() /* gc may have been skipped */
&& (_gc_count_before == gch->total_collections())),
"total_collections() should be monotonically increasing");
MutexLockerEx x(FullGCCount_lock, Mutex::_no_safepoint_check_flag);
+ assert(_full_gc_count_before <= gch->total_full_collections(), "Error");
if (gch->total_full_collections() == _full_gc_count_before) {
! // Disable iCMS until the full collection is done, and
! // remember that we did so.
CMSCollector::disable_icms();
+ _disabled_icms = true;
// In case CMS thread was in icms_wait(), wake it up.
CMSCollector::start_icms();
// Nudge the CMS thread to start a concurrent collection.
CMSCollector::request_full_gc(_full_gc_count_before);
} else {
+ assert(_full_gc_count_before < gch->total_full_collections(), "Error");
FullGCCount_lock->notify_all(); // Inform the Java thread its work is done
}
}
bool VM_GenCollectFullConcurrent::evaluate_at_safepoint() const {
*** 257,264 ****
// witness to our request.
while (gch->total_full_collections_completed() <= _full_gc_count_before) {
FullGCCount_lock->wait(Mutex::_no_safepoint_check_flag);
}
}
! // Enable iCMS back.
CMSCollector::enable_icms();
}
--- 261,270 ----
// witness to our request.
while (gch->total_full_collections_completed() <= _full_gc_count_before) {
FullGCCount_lock->wait(Mutex::_no_safepoint_check_flag);
}
}
! // Enable iCMS back if we disabled it earlier.
! if (_disabled_icms) {
CMSCollector::enable_icms();
+ }
}