////////////////////////////////////////////////////////// // Methods in class VM_CMS_Final_Remark_Operation ////////////////////////////////////////////////////////// void VM_CMS_Final_Remark::doit() { if (lost_race()) { // Nothing to do. return; } #ifndef USDT2 HS_DTRACE_PROBE(hs_private, cms__remark__begin); #else /* USDT2 */ HS_PRIVATE_CMS_REMARK_BEGIN(); #endif /* USDT2 */ _collector->_gc_timer_cm->register_gc_pause_start("Final Mark"); GenCollectedHeap* gch = GenCollectedHeap::heap(); GCCauseSetter gccs(gch, GCCause::_cms_final_remark); VM_CMS_Operation::verify_before_gc(); IsGCActiveMark x; // stop-world GC active _collector->do_CMS_operation(CMSCollector::CMS_op_checkpointRootsFinal, gch->gc_cause()); VM_CMS_Operation::verify_after_gc(); _collector->save_heap_summary(); _collector->_gc_timer_cm->register_gc_pause_end(); #ifndef USDT2 HS_DTRACE_PROBE(hs_private, cms__remark__end); #else /* USDT2 */ HS_PRIVATE_CMS_REMARK_END(); #endif /* USDT2 */ }
////////////////////////////////////////////////////////// // Methods in class VM_CMS_Final_Remark_Operation ////////////////////////////////////////////////////////// void VM_CMS_Final_Remark::doit() { if (lost_race()) { // Nothing to do. return; } HS_PRIVATE_CMS_REMARK_BEGIN(); GCIdMark gc_id_mark(_gc_id); _collector->_gc_timer_cm->register_gc_pause_start("Final Mark"); GenCollectedHeap* gch = GenCollectedHeap::heap(); GCCauseSetter gccs(gch, GCCause::_cms_final_remark); VM_CMS_Operation::verify_before_gc(); IsGCActiveMark x; // stop-world GC active _collector->do_CMS_operation(CMSCollector::CMS_op_checkpointRootsFinal, gch->gc_cause()); VM_CMS_Operation::verify_after_gc(); _collector->save_heap_summary(); _collector->_gc_timer_cm->register_gc_pause_end(); HS_PRIVATE_CMS_REMARK_END(); }
bool VM_CMS_Operation::doit_prologue() { assert(Thread::current()->is_ConcurrentGC_thread(), "just checking"); assert(!CMSCollector::foregroundGCShouldWait(), "Possible deadlock"); assert(!ConcurrentMarkSweepThread::cms_thread_has_cms_token(), "Possible deadlock"); Heap_lock->lock(); if (lost_race()) { assert(_prologue_succeeded == false, "Initialized in c'tor"); Heap_lock->unlock(); } else { _prologue_succeeded = true; } return _prologue_succeeded; }
////////////////////////////////////////////////////////// // Methods in class VM_CMS_Final_Remark_Operation ////////////////////////////////////////////////////////// void VM_CMS_Final_Remark::doit() { if (lost_race()) { // Nothing to do. return; } HS_DTRACE_PROBE(hs_private, cms__remark__begin); GenCollectedHeap* gch = GenCollectedHeap::heap(); GCCauseSetter gccs(gch, GCCause::_cms_final_remark); VM_CMS_Operation::verify_before_gc(); IsGCActiveMark x; // stop-world GC active _collector->do_CMS_operation(CMSCollector::CMS_op_checkpointRootsFinal); VM_CMS_Operation::verify_after_gc(); HS_DTRACE_PROBE(hs_private, cms__remark__end); }
bool VM_CMS_Operation::doit_prologue() { assert(Thread::current()->is_ConcurrentGC_thread(), "just checking"); assert(!CMSCollector::foregroundGCShouldWait(), "Possible deadlock"); assert(!ConcurrentMarkSweepThread::cms_thread_has_cms_token(), "Possible deadlock"); if (needs_pll()) { acquire_pending_list_lock(); } // Get the Heap_lock after the pending_list_lock. Heap_lock->lock(); if (lost_race()) { assert(_prologue_succeeded == false, "Initialized in c'tor"); Heap_lock->unlock(); if (needs_pll()) { release_and_notify_pending_list_lock(); } } else { _prologue_succeeded = true; } return _prologue_succeeded; }