changeset 7451:84bd193aad36

Mark whole new GCLAB on allocation.
author Roman Kennke <rkennke@redhat.com>
date Fri, 16 Jan 2015 23:59:37 +0100
parents 557818193d0e
children 1ef0e3bb0a21
files src/share/vm/gc_implementation/shenandoah/shenandoahConcurrentThread.cpp src/share/vm/gc_implementation/shenandoah/shenandoahHeap.cpp
diffstat 2 files changed, 7 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/share/vm/gc_implementation/shenandoah/shenandoahConcurrentThread.cpp	Fri Jan 16 13:10:10 2015 +0100
+++ b/src/share/vm/gc_implementation/shenandoah/shenandoahConcurrentThread.cpp	Fri Jan 16 23:59:37 2015 +0100
@@ -166,7 +166,6 @@
 }
 
 void ShenandoahConcurrentThread::schedule_full_gc() {
-  tty->print_cr("scheduling full gc");
   _do_full_gc = true;
 }
 
--- a/src/share/vm/gc_implementation/shenandoah/shenandoahHeap.cpp	Fri Jan 16 13:10:10 2015 +0100
+++ b/src/share/vm/gc_implementation/shenandoah/shenandoahHeap.cpp	Fri Jan 16 23:59:37 2015 +0100
@@ -387,6 +387,13 @@
     oom_during_evacuation();
     return NULL;
   }
+  assert(! _concurrent_mark_in_progress, "no new gclabs during marking");
+  assert(_evacuation_in_progress, "new gclabs only during evacuation");
+  if (ShenandoahUpdateRefsEarly) {
+    // We mark the whole tlab here, this way we avoid marking every single
+    // allocated object.
+    _next_mark_bit_map->parMarkRange(MemRegion(result, word_size));
+  }
   assert(! heap_region_containing(result)->is_in_collection_set(), "Never allocate in dirty region");
   if (result != NULL) {
     if (ShenandoahTraceTLabs) {