< prev index next >

src/hotspot/share/gc/shared/collectedHeap.cpp

Print this page

        

*** 466,506 **** ClassAllocator allocator(klass, size, THREAD); return allocator.allocate(); } void CollectedHeap::ensure_parsability(bool retire_tlabs) { - // The second disjunct in the assertion below makes a concession - // for the start-up verification done while the VM is being - // created. Callers be careful that you know that mutators - // aren't going to interfere -- for instance, this is permissible - // if we are still single-threaded and have either not yet - // started allocating (nothing much to verify) or we have - // started allocating but are now a full-fledged JavaThread - // (and have thus made our TLAB's) available for filling. assert(SafepointSynchronize::is_at_safepoint() || !is_init_completed(), ! "Should only be called at a safepoint or at start-up" ! " otherwise concurrent mutator activity may make heap " ! " unparsable again"); ! if (UseTLAB && retire_tlabs) { ! // Accumulate statistics before retiring ! ThreadLocalAllocBuffer::accumulate_statistics_before_gc(); ! } ! // The main thread starts allocating via a TLAB even before it ! // has added itself to the threads list at vm boot-up. ! JavaThreadIteratorWithHandle jtiwh; ! assert(jtiwh.length() > 0, ! "Attempt to fill tlabs before main thread has been added" ! " to threads list is doomed to failure!"); ! BarrierSet *bs = BarrierSet::barrier_set(); ! for (; JavaThread *thread = jtiwh.next(); ) { ! if (UseTLAB) { ! thread->tlab().make_parsable(retire_tlabs); ! } ! bs->make_parsable(thread); } } void CollectedHeap::resize_all_tlabs() { assert(SafepointSynchronize::is_at_safepoint() || !is_init_completed(), "Should only resize tlabs at safepoint"); --- 466,492 ---- ClassAllocator allocator(klass, size, THREAD); return allocator.allocate(); } void CollectedHeap::ensure_parsability(bool retire_tlabs) { assert(SafepointSynchronize::is_at_safepoint() || !is_init_completed(), ! "Should only be called at a safepoint or at start-up"); ! ThreadLocalAllocStats stats; ! for (JavaThreadIteratorWithHandle jtiwh; JavaThread *thread = jtiwh.next(); ) { ! BarrierSet::barrier_set()->make_parsable(thread); ! if (UseTLAB) { ! if (retire_tlabs) { ! thread->tlab().retire(&stats); ! } else { ! thread->tlab().make_parsable(); ! } ! } } + + stats.publish(); } void CollectedHeap::resize_all_tlabs() { assert(SafepointSynchronize::is_at_safepoint() || !is_init_completed(), "Should only resize tlabs at safepoint");
< prev index next >