changeset 9436:f6e57d4e6abb

Improve accounting for TLABs.
author rkennke
date Thu, 30 Jul 2015 15:51:41 +0200
parents daae0f9a9a43
children 5cec8cad3e97
files src/share/vm/gc_implementation/shenandoah/shenandoahHeap.cpp src/share/vm/gc_implementation/shenandoah/shenandoahHeap.hpp src/share/vm/gc_implementation/shenandoah/shenandoahMarkCompact.cpp src/share/vm/gc_implementation/shenandoah/vm_operations_shenandoah.cpp
diffstat 4 files changed, 25 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/src/share/vm/gc_implementation/shenandoah/shenandoahHeap.cpp	Wed Jul 29 11:02:20 2015 +0200
+++ b/src/share/vm/gc_implementation/shenandoah/shenandoahHeap.cpp	Thu Jul 30 15:51:41 2015 +0200
@@ -1874,6 +1874,7 @@
     if (!silent) gclog_or_tty->print("(SKIPPING roots, heapRegions, remset) ");
   }
 }
+
 size_t ShenandoahHeap::tlab_capacity(Thread *thr) const {
   return _free_regions->available();
 }
@@ -2098,11 +2099,10 @@
 
 void ShenandoahHeap::start_concurrent_marking() {
 
-  accumulate_statistics_all_tlabs();
-
   set_concurrent_mark_in_progress(true);
   // We need to reset all TLABs because we'd lose marks on all objects allocated in them.
   if (UseTLAB) {
+    accumulate_statistics_all_tlabs();
     ensure_parsability(true);
   }
 
@@ -2270,6 +2270,10 @@
 
 }
 
+void ShenandoahHeap::accumulate_statistics_all_tlabs() {
+  CollectedHeap::accumulate_statistics_all_tlabs();
+}
+
 void ShenandoahHeap::stop_concurrent_marking() {
   assert(concurrent_mark_in_progress(), "How else could we get here?");
   if (! cancelled_concgc()) {
@@ -2279,6 +2283,14 @@
   }
   set_concurrent_mark_in_progress(false);
 
+
+  if (UseTLAB) {
+    shenandoahPolicy()->record_phase_start(ShenandoahCollectorPolicy::resize_tlabs);
+    accumulate_statistics_all_tlabs();
+    resize_all_tlabs();
+    shenandoahPolicy()->record_phase_end(ShenandoahCollectorPolicy::resize_tlabs);
+  }
+
   if (ShenandoahGCVerbose) {
     print_heap_regions();
   }
--- a/src/share/vm/gc_implementation/shenandoah/shenandoahHeap.hpp	Wed Jul 29 11:02:20 2015 +0200
+++ b/src/share/vm/gc_implementation/shenandoah/shenandoahHeap.hpp	Thu Jul 30 15:51:41 2015 +0200
@@ -214,6 +214,7 @@
   virtual size_t max_tlab_size() const;
 
   void resize_all_tlabs();
+  void accumulate_statistics_all_tlabs();
   void accumulate_statistics_all_gclabs();
 
   HeapWord* tlab_post_allocation_setup(HeapWord* obj, bool new_obj);
--- a/src/share/vm/gc_implementation/shenandoah/shenandoahMarkCompact.cpp	Wed Jul 29 11:02:20 2015 +0200
+++ b/src/share/vm/gc_implementation/shenandoah/shenandoahMarkCompact.cpp	Thu Jul 30 15:51:41 2015 +0200
@@ -69,6 +69,7 @@
   }
  
   if (UseTLAB) {
+    _heap->accumulate_statistics_all_tlabs();
     _heap->ensure_parsability(true);
   }
   
@@ -132,6 +133,10 @@
 
   _heap->reset_mark_bitmap();
 
+  if (UseTLAB) {
+    _heap->resize_all_tlabs();
+  }
+
   if (ShenandoahTraceFullGC) {
     gclog_or_tty->print_cr("Shenandoah-full-gc: finish with heap used: "SIZE_FORMAT" MB", _heap->used() / M);
   }
--- a/src/share/vm/gc_implementation/shenandoah/vm_operations_shenandoah.cpp	Wed Jul 29 11:02:20 2015 +0200
+++ b/src/share/vm/gc_implementation/shenandoah/vm_operations_shenandoah.cpp	Thu Jul 30 15:51:41 2015 +0200
@@ -31,10 +31,6 @@
     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);
-
   sh->shenandoahPolicy()->record_phase_end(ShenandoahCollectorPolicy::init_mark);
 
   if (! ShenandoahConcurrentMarking) {
@@ -51,6 +47,11 @@
 void VM_ShenandoahFullGC::doit() {
 
   ShenandoahMarkCompact::do_mark_compact();
+
+  ShenandoahHeap *sh = ShenandoahHeap::heap();
+  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 {