Mercurial > hg > graal-compiler
changeset 20571:1d6eb209432a
8058568: GC cleanup phase can cause G1 skipping a System.gc()
Summary: Marking G1 FullGC as a _full collection and passing down the correct before count.
Reviewed-by: brutisso, mgerdin
author | sjohanss |
---|---|
date | Mon, 20 Oct 2014 10:18:17 +0200 |
parents | 1bd99e1dc168 |
children | 87f199a9c1b1 |
files | src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp src/share/vm/gc_implementation/g1/vm_operations_g1.hpp |
diffstat | 2 files changed, 4 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp Fri Oct 24 03:03:59 2014 +0000 +++ b/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp Mon Oct 20 10:18:17 2014 +0200 @@ -2478,6 +2478,7 @@ unsigned int gc_count_before; unsigned int old_marking_count_before; + unsigned int full_gc_count_before; bool retry_gc; do { @@ -2488,6 +2489,7 @@ // Read the GC count while holding the Heap_lock gc_count_before = total_collections(); + full_gc_count_before = total_full_collections(); old_marking_count_before = _old_marking_cycles_started; } @@ -2532,7 +2534,7 @@ VMThread::execute(&op); } else { // Schedule a Full GC. - VM_G1CollectFull op(gc_count_before, old_marking_count_before, cause); + VM_G1CollectFull op(gc_count_before, full_gc_count_before, cause); VMThread::execute(&op); } }
--- a/src/share/vm/gc_implementation/g1/vm_operations_g1.hpp Fri Oct 24 03:03:59 2014 +0000 +++ b/src/share/vm/gc_implementation/g1/vm_operations_g1.hpp Mon Oct 20 10:18:17 2014 +0200 @@ -60,7 +60,7 @@ VM_G1CollectFull(unsigned int gc_count_before, unsigned int full_gc_count_before, GCCause::Cause cause) - : VM_GC_Operation(gc_count_before, cause, full_gc_count_before) { } + : VM_GC_Operation(gc_count_before, cause, full_gc_count_before, true) { } virtual VMOp_Type type() const { return VMOp_G1CollectFull; } virtual void doit(); virtual const char* name() const {