changeset 9457:5ac3e2b600e1

Fix for -XX:-UseTLAB
author chf
date Thu, 27 Aug 2015 13:46:52 -0400
parents cb4719896b2f
children 8ab33a6942a6
files src/share/vm/gc/shared/threadLocalAllocBuffer.cpp src/share/vm/gc/shenandoah/shenandoahHeap.cpp src/share/vm/gc/shenandoah/shenandoahMarkCompact.cpp src/share/vm/gc/shenandoah/vm_operations_shenandoah.cpp
diffstat 4 files changed, 23 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/src/share/vm/gc/shared/threadLocalAllocBuffer.cpp	Thu Aug 20 18:28:43 2015 +0200
+++ b/src/share/vm/gc/shared/threadLocalAllocBuffer.cpp	Thu Aug 27 13:46:52 2015 -0400
@@ -100,7 +100,7 @@
 
   } else {
     assert(_number_of_refills == 0 && _fast_refill_waste == 0 &&
-           _slow_refill_waste == 0 && _gc_waste          == 0,
+           _slow_refill_waste == 0, // && _gc_waste          == 0,
            "tlab stats == 0");
   }
   global_stats()->update_slow_allocations(_slow_allocations);
--- a/src/share/vm/gc/shenandoah/shenandoahHeap.cpp	Thu Aug 20 18:28:43 2015 +0200
+++ b/src/share/vm/gc/shenandoah/shenandoahHeap.cpp	Thu Aug 27 13:46:52 2015 -0400
@@ -413,12 +413,16 @@
 }
 
 HeapWord* ShenandoahHeap::allocate_from_gclab(Thread* thread, size_t size) {
+  if (UseTLAB) {
   HeapWord* obj = thread->gclab().allocate(size);
   if (obj != NULL) {
     return obj;
   }
   // Otherwise...
   return allocate_from_gclab_slow(thread, size);
+  } else {
+    return NULL;
+  }
 }
 
 HeapWord* ShenandoahHeap::allocate_from_gclab_slow(Thread* thread, size_t size) {
@@ -1307,6 +1311,7 @@
 };
 
 void ShenandoahHeap::ensure_parsability(bool retire_tlabs) {
+  if (UseTLAB) {
   CollectedHeap::ensure_parsability(retire_tlabs);
 
   RetireTLABClosure cl(retire_tlabs);
@@ -1314,6 +1319,7 @@
     cl.do_thread(thread);
   }
   gc_threads_do(&cl);
+  }
 }
 
 void ShenandoahHeap::prepare_for_update_references() {
--- a/src/share/vm/gc/shenandoah/shenandoahMarkCompact.cpp	Thu Aug 20 18:28:43 2015 +0200
+++ b/src/share/vm/gc/shenandoah/shenandoahMarkCompact.cpp	Thu Aug 27 13:46:52 2015 -0400
@@ -365,7 +365,10 @@
 
     } else {
       size_t live = r->used();
-      if (live == 0) _heap->add_free_region(r);
+      if (live == 0) {
+	r->recycle();
+	_heap->add_free_region(r);
+      }
       r->setLiveData(live);
       _live += live;
     }
--- a/src/share/vm/gc/shenandoah/vm_operations_shenandoah.cpp	Thu Aug 20 18:28:43 2015 +0200
+++ b/src/share/vm/gc/shenandoah/vm_operations_shenandoah.cpp	Thu Aug 27 13:46:52 2015 -0400
@@ -1,6 +1,7 @@
 /*
   Copyright 2014 Red Hat, Inc. and/or its affiliates.
 */
+
 #include "gc/shenandoah/shenandoahMarkCompact.hpp"
 #include "gc/shenandoah/vm_operations_shenandoah.hpp"
 #include "gc/shenandoah/shenandoahHeap.inline.hpp"
@@ -30,10 +31,11 @@
   if (ShenandoahGCVerbose)
     tty->print("vm_ShenandoahInitMark\n");
   sh->start_concurrent_marking();
-
-  sh->shenandoahPolicy()->record_phase_start(ShenandoahCollectorPolicy::resize_tlabs);
-  sh->resize_all_tlabs();
-  sh->shenandoahPolicy()->record_phase_end(ShenandoahCollectorPolicy::resize_tlabs);
+  if (UseTLAB) {
+    sh->shenandoahPolicy()->record_phase_start(ShenandoahCollectorPolicy::resize_tlabs);
+    sh->resize_all_tlabs();
+    sh->shenandoahPolicy()->record_phase_end(ShenandoahCollectorPolicy::resize_tlabs);
+  }
 
   sh->shenandoahPolicy()->record_phase_end(ShenandoahCollectorPolicy::init_mark);
 
@@ -51,6 +53,12 @@
 void VM_ShenandoahFullGC::doit() {
 
   ShenandoahMarkCompact::do_mark_compact();
+  ShenandoahHeap *sh = ShenandoahHeap::heap();
+  if (UseTLAB) {
+    sh->shenandoahPolicy()->record_phase_start(ShenandoahCollectorPolicy::resize_tlabs);
+    sh->resize_all_tlabs();
+    sh->shenandoahPolicy()->record_phase_end(ShenandoahCollectorPolicy::resize_tlabs);
+  }
 }
 
 const char* VM_ShenandoahFullGC::name() const {