changeset 7321: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 {