1991 // a mark-sweep-compact. |
1991 // a mark-sweep-compact. |
1992 void CMSCollector::do_compaction_work(bool clear_all_soft_refs) { |
1992 void CMSCollector::do_compaction_work(bool clear_all_soft_refs) { |
1993 GenCollectedHeap* gch = GenCollectedHeap::heap(); |
1993 GenCollectedHeap* gch = GenCollectedHeap::heap(); |
1994 |
1994 |
1995 STWGCTimer* gc_timer = GenMarkSweep::gc_timer(); |
1995 STWGCTimer* gc_timer = GenMarkSweep::gc_timer(); |
1996 gc_timer->register_gc_start(os::elapsed_counter()); |
1996 gc_timer->register_gc_start(); |
1997 |
1997 |
1998 SerialOldTracer* gc_tracer = GenMarkSweep::gc_tracer(); |
1998 SerialOldTracer* gc_tracer = GenMarkSweep::gc_tracer(); |
1999 gc_tracer->report_gc_start(gch->gc_cause(), gc_timer->gc_start()); |
1999 gc_tracer->report_gc_start(gch->gc_cause(), gc_timer->gc_start()); |
2000 |
2000 |
2001 GCTraceTime t("CMS:MSC ", PrintGCDetails && Verbose, true, NULL); |
2001 GCTraceTime t("CMS:MSC ", PrintGCDetails && Verbose, true, NULL); |
2087 // Sample collection pause time and reset for collection interval. |
2087 // Sample collection pause time and reset for collection interval. |
2088 if (UseAdaptiveSizePolicy) { |
2088 if (UseAdaptiveSizePolicy) { |
2089 size_policy()->msc_collection_end(gch->gc_cause()); |
2089 size_policy()->msc_collection_end(gch->gc_cause()); |
2090 } |
2090 } |
2091 |
2091 |
2092 gc_timer->register_gc_end(os::elapsed_counter()); |
2092 gc_timer->register_gc_end(); |
2093 |
2093 |
2094 gc_tracer->report_gc_end(gc_timer->gc_end(), gc_timer->time_partitions()); |
2094 gc_tracer->report_gc_end(gc_timer->gc_end(), gc_timer->time_partitions()); |
2095 |
2095 |
2096 // For a mark-sweep-compact, compute_new_size() will be called |
2096 // For a mark-sweep-compact, compute_new_size() will be called |
2097 // in the heap's do_collection() method. |
2097 // in the heap's do_collection() method. |
2473 } |
2473 } |
2474 } |
2474 } |
2475 |
2475 |
2476 void CMSCollector::register_gc_start(GCCause::Cause cause) { |
2476 void CMSCollector::register_gc_start(GCCause::Cause cause) { |
2477 _cms_start_registered = true; |
2477 _cms_start_registered = true; |
2478 _gc_timer_cm->register_gc_start(os::elapsed_counter()); |
2478 _gc_timer_cm->register_gc_start(); |
2479 _gc_tracer_cm->report_gc_start(cause, _gc_timer_cm->gc_start()); |
2479 _gc_tracer_cm->report_gc_start(cause, _gc_timer_cm->gc_start()); |
2480 } |
2480 } |
2481 |
2481 |
2482 void CMSCollector::register_gc_end() { |
2482 void CMSCollector::register_gc_end() { |
2483 if (_cms_start_registered) { |
2483 if (_cms_start_registered) { |
2484 report_heap_summary(GCWhen::AfterGC); |
2484 report_heap_summary(GCWhen::AfterGC); |
2485 |
2485 |
2486 _gc_timer_cm->register_gc_end(os::elapsed_counter()); |
2486 _gc_timer_cm->register_gc_end(); |
2487 _gc_tracer_cm->report_gc_end(_gc_timer_cm->gc_end(), _gc_timer_cm->time_partitions()); |
2487 _gc_tracer_cm->report_gc_end(_gc_timer_cm->gc_end(), _gc_timer_cm->time_partitions()); |
2488 _cms_start_registered = false; |
2488 _cms_start_registered = false; |
2489 } |
2489 } |
2490 } |
2490 } |
2491 |
2491 |