Mercurial > hg > graal-jvmci-8
changeset 22898:f97f21d8d58c
8055416: Several vm/gc/heap/summary "After GC" events emitted for the same GC ID
Reviewed-by: brutisso, ehelin
author | stefank |
---|---|
date | Mon, 25 Aug 2014 09:10:13 +0200 |
parents | 80ac3ee51955 |
children | 4fa1813a03b0 |
files | src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp |
diffstat | 2 files changed, 14 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp Wed Mar 25 11:03:16 2015 +0100 +++ b/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp Mon Aug 25 09:10:13 2014 +0200 @@ -1877,6 +1877,7 @@ _old_marking_cycles_started(0), _old_marking_cycles_completed(0), _concurrent_cycle_started(false), + _heap_summary_sent(false), _in_cset_fast_test(), _dirty_cards_region_list(NULL), _worker_cset_start_region(NULL), @@ -2447,13 +2448,24 @@ _gc_timer_cm->register_gc_end(); _gc_tracer_cm->report_gc_end(_gc_timer_cm->gc_end(), _gc_timer_cm->time_partitions()); + // Clear state variables to prepare for the next concurrent cycle. _concurrent_cycle_started = false; + _heap_summary_sent = false; } } void G1CollectedHeap::trace_heap_after_concurrent_cycle() { if (_concurrent_cycle_started) { - trace_heap_after_gc(_gc_tracer_cm); + // This function can be called when: + // the cleanup pause is run + // the concurrent cycle is aborted before the cleanup pause. + // the concurrent cycle is aborted after the cleanup pause, + // but before the concurrent cycle end has been registered. + // Make sure that we only send the heap information once. + if (!_heap_summary_sent) { + trace_heap_after_gc(_gc_tracer_cm); + _heap_summary_sent = true; + } } }
--- a/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp Wed Mar 25 11:03:16 2015 +0100 +++ b/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp Mon Aug 25 09:10:13 2014 +0200 @@ -346,6 +346,7 @@ volatile unsigned int _old_marking_cycles_completed; bool _concurrent_cycle_started; + bool _heap_summary_sent; // This is a non-product method that is helpful for testing. It is // called at the end of a GC and artificially expands the heap by