# HG changeset patch # User Roman Kennke # Date 1423826704 -3600 # Node ID b581d6e6b6406c066afd9dec5306697feacd7d16 # Parent 8a704517c74ea3572247c50af031b131bec675f9 Improve counting of full GCs. diff -r 8a704517c74e -r b581d6e6b640 src/share/vm/gc_implementation/shenandoah/shenandoahCollectorPolicy.cpp --- a/src/share/vm/gc_implementation/shenandoah/shenandoahCollectorPolicy.cpp Thu Feb 12 21:42:09 2015 +0100 +++ b/src/share/vm/gc_implementation/shenandoah/shenandoahCollectorPolicy.cpp Fri Feb 13 12:25:04 2015 +0100 @@ -366,6 +366,7 @@ initialize_all(); _user_requested_gcs = 0; + _allocation_failure_gcs = 0; _phase_names[init_mark] = "InitMark"; _phase_names[final_mark] = "FinalMark"; @@ -480,6 +481,10 @@ _user_requested_gcs++; } +void ShenandoahCollectorPolicy::record_allocation_failure_gc() { + _allocation_failure_gcs++; +} + bool ShenandoahCollectorPolicy::should_start_concurrent_mark(size_t used, size_t capacity) { ShenandoahHeap* heap = ShenandoahHeap::heap(); @@ -521,6 +526,7 @@ print_summary_sd("Full GC Times", 0, &(_timing_data[full_gc]._ms)); gclog_or_tty->print_cr("User requested GCs: "SIZE_FORMAT, _user_requested_gcs); + gclog_or_tty->print_cr("Allocation failure GCs: "SIZE_FORMAT, _allocation_failure_gcs); gclog_or_tty->print_cr(" "); double total_sum = _timing_data[init_mark]._ms.sum() + diff -r 8a704517c74e -r b581d6e6b640 src/share/vm/gc_implementation/shenandoah/shenandoahCollectorPolicy.hpp --- a/src/share/vm/gc_implementation/shenandoah/shenandoahCollectorPolicy.hpp Thu Feb 12 21:42:09 2015 +0100 +++ b/src/share/vm/gc_implementation/shenandoah/shenandoahCollectorPolicy.hpp Fri Feb 13 12:25:04 2015 +0100 @@ -52,6 +52,7 @@ const char* _phase_names[_num_phases]; size_t _user_requested_gcs; + size_t _allocation_failure_gcs; ShenandoahHeap* _pgc; ShenandoahHeuristics* _heuristics; @@ -81,6 +82,7 @@ void record_phase_end(TimingPhase phase); void record_user_requested_gc(); + void record_allocation_failure_gc(); void record_bytes_allocated(size_t bytes); void record_bytes_reclaimed(size_t bytes); diff -r 8a704517c74e -r b581d6e6b640 src/share/vm/gc_implementation/shenandoah/shenandoahConcurrentThread.cpp --- a/src/share/vm/gc_implementation/shenandoah/shenandoahConcurrentThread.cpp Thu Feb 12 21:42:09 2015 +0100 +++ b/src/share/vm/gc_implementation/shenandoah/shenandoahConcurrentThread.cpp Fri Feb 13 12:25:04 2015 +0100 @@ -84,6 +84,11 @@ if (_do_full_gc) { { MonitorLockerEx ml(ShenandoahJNICritical_lock, true); + if (_full_gc_cause == GCCause::_allocation_failure) { + heap->shenandoahPolicy()->record_allocation_failure_gc(); + } else { + heap->shenandoahPolicy()->record_user_requested_gc(); + } VM_ShenandoahFullGC full_gc; VMThread::execute(&full_gc); while (_waiting_for_jni_critical) { @@ -153,12 +158,13 @@ } } -void ShenandoahConcurrentThread::do_full_gc() { +void ShenandoahConcurrentThread::do_full_gc(GCCause::Cause cause) { assert(Thread::current()->is_Java_thread(), "expect Java thread here"); MonitorLockerEx ml(ShenandoahFullGC_lock); _do_full_gc = true; + _full_gc_cause = cause; while (_do_full_gc) { ml.wait(); } diff -r 8a704517c74e -r b581d6e6b640 src/share/vm/gc_implementation/shenandoah/shenandoahConcurrentThread.hpp --- a/src/share/vm/gc_implementation/shenandoah/shenandoahConcurrentThread.hpp Thu Feb 12 21:42:09 2015 +0100 +++ b/src/share/vm/gc_implementation/shenandoah/shenandoahConcurrentThread.hpp Fri Feb 13 12:25:04 2015 +0100 @@ -5,6 +5,7 @@ #define SHARE_VM_GC_IMPLEMENTATION_SHENANDOAH_SHENANDOAHCONCURRENTTHREAD_HPP #include "gc_implementation/shared/concurrentGCThread.hpp" +#include "gc_interface/gcCause.hpp" #include "memory/resourceArea.hpp" // For now we just want to have a concurrent marking thread. @@ -29,6 +30,7 @@ static SuspendibleThreadSet _sts; bool _do_full_gc; + GCCause::Cause _full_gc_cause; void sleepBeforeNextCycle(); @@ -56,7 +58,7 @@ bool cm_has_aborted() { return _concurrent_mark_aborted;} void clear_cm_aborted() { _concurrent_mark_aborted = false;} - void do_full_gc(); + void do_full_gc(GCCause::Cause cause); void schedule_full_gc(); diff -r 8a704517c74e -r b581d6e6b640 src/share/vm/gc_implementation/shenandoah/shenandoahHeap.cpp --- a/src/share/vm/gc_implementation/shenandoah/shenandoahHeap.cpp Thu Feb 12 21:42:09 2015 +0100 +++ b/src/share/vm/gc_implementation/shenandoah/shenandoahHeap.cpp Fri Feb 13 12:25:04 2015 +0100 @@ -1554,8 +1554,7 @@ if (ShenandoahTraceFullGC) { gclog_or_tty->print_cr("Shenandoah-full-gc: requested full GC"); } - shenandoahPolicy()->record_user_requested_gc(); - _concurrent_gc_thread->do_full_gc(); + _concurrent_gc_thread->do_full_gc(cause); } } else if (cause == GCCause::_allocation_failure) { @@ -1563,7 +1562,7 @@ gclog_or_tty->print_cr("Shenandoah-full-gc: full GC for allocation failure"); } collector_policy()->set_should_clear_all_soft_refs(true); - _concurrent_gc_thread->do_full_gc(); + _concurrent_gc_thread->do_full_gc(cause); } else if (cause == GCCause::_gc_locker) {