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