< prev index next >
src/hotspot/share/gc/shared/collectedHeap.cpp
Print this page
@@ -466,41 +466,27 @@
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");
+ "Should only be called at a safepoint or at start-up");
- if (UseTLAB && retire_tlabs) {
- // Accumulate statistics before retiring
- ThreadLocalAllocBuffer::accumulate_statistics_before_gc();
- }
+ ThreadLocalAllocStats stats;
- // 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);
+ 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 >