< 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 >