Mercurial > hg > jdk9-shenandoah > hotspot
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 {