< prev index next >

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

Print this page
rev 48920 : [backport] Use PLAB for evacuations instead of TLAB

*** 52,63 **** for (JavaThreadIteratorWithHandle jtiwh; JavaThread *thread = jtiwh.next(); ) { thread->tlab().accumulate_statistics(); thread->tlab().initialize_statistics(); } - Universe::heap()->accumulate_statistics_all_gclabs(); - // Publish new stats if some allocation occurred. if (global_stats()->allocation() != 0) { global_stats()->publish(); global_stats()->print(); } --- 52,61 ----
*** 67,77 **** Thread* thread = myThread(); size_t capacity = Universe::heap()->tlab_capacity(thread); size_t used = Universe::heap()->tlab_used(thread); _gc_waste += (unsigned)remaining(); ! size_t total_allocated = _gclab ? thread->allocated_bytes_gclab() : thread->allocated_bytes(); size_t allocated_since_last_gc = total_allocated - _allocated_before_last_gc; _allocated_before_last_gc = total_allocated; print_stats("gc"); --- 65,75 ---- Thread* thread = myThread(); size_t capacity = Universe::heap()->tlab_capacity(thread); size_t used = Universe::heap()->tlab_used(thread); _gc_waste += (unsigned)remaining(); ! size_t total_allocated = thread->allocated_bytes(); size_t allocated_since_last_gc = total_allocated - _allocated_before_last_gc; _allocated_before_last_gc = total_allocated; print_stats("gc");
*** 112,127 **** void ThreadLocalAllocBuffer::make_parsable(bool retire, bool zap) { if (end() != NULL) { invariants(); if (retire) { - if (_gclab) { - myThread()->incr_allocated_bytes_gclab(used_bytes()); - } else { myThread()->incr_allocated_bytes(used_bytes()); } - } HeapWord* obj = Universe::heap()->tlab_post_allocation_setup(top()); CollectedHeap::fill_with_object(obj, hard_end(), retire && zap); if (retire || ZeroTLAB) { // "Reset" the TLAB --- 110,121 ----
*** 192,204 **** set_pf_top(top); set_end(end); invariants(); } ! void ThreadLocalAllocBuffer::initialize(bool gclab) { ! _initialized = true; ! _gclab = gclab; initialize(NULL, // start NULL, // top NULL); // end set_desired_size(initial_desired_size()); --- 186,196 ---- set_pf_top(top); set_end(end); invariants(); } ! void ThreadLocalAllocBuffer::initialize() { initialize(NULL, // start NULL, // top NULL); // end set_desired_size(initial_desired_size());
*** 251,262 **** #endif // During jvm startup, the main thread is initialized // before the heap is initialized. So reinitialize it now. guarantee(Thread::current()->is_Java_thread(), "tlab initialization thread not Java thread"); ! Thread::current()->tlab().initialize(false); ! Thread::current()->gclab().initialize(true); log_develop_trace(gc, tlab)("TLAB min: " SIZE_FORMAT " initial: " SIZE_FORMAT " max: " SIZE_FORMAT, min_size(), Thread::current()->tlab().initial_desired_size(), max_size()); } --- 243,253 ---- #endif // During jvm startup, the main thread is initialized // before the heap is initialized. So reinitialize it now. guarantee(Thread::current()->is_Java_thread(), "tlab initialization thread not Java thread"); ! Thread::current()->tlab().initialize(); log_develop_trace(gc, tlab)("TLAB min: " SIZE_FORMAT " initial: " SIZE_FORMAT " max: " SIZE_FORMAT, min_size(), Thread::current()->tlab().initial_desired_size(), max_size()); }
*** 315,345 **** } guarantee(p == top(), "end of last object must match end of space"); } Thread* ThreadLocalAllocBuffer::myThread() { ! ByteSize gclab_offset = Thread::gclab_start_offset(); ! ByteSize tlab_offset = Thread::tlab_start_offset(); ! ByteSize offs = _gclab ? gclab_offset : tlab_offset; ! Thread* thread = (Thread*)(((char *)this) + ! in_bytes(start_offset()) - in_bytes(offs)); ! #ifdef ASSERT ! assert(this == (_gclab ? &thread->gclab() : &thread->tlab()), "must be"); ! #endif ! return thread; ! } ! ! size_t ThreadLocalAllocBuffer::end_reserve() { ! int reserve_size = typeArrayOopDesc::header_size(T_INT); ! return MAX2(reserve_size, _reserve_for_allocation_prefetch); ! } ! ! void ThreadLocalAllocBuffer::rollback(size_t size) { ! HeapWord* old_top = top(); ! if (old_top != NULL) { // Pathological case: we accept that we can't rollback. ! set_top(old_top - size); ! } } GlobalTLABStats::GlobalTLABStats() : _allocating_threads_avg(TLABAllocationWeight) { --- 306,318 ---- } guarantee(p == top(), "end of last object must match end of space"); } Thread* ThreadLocalAllocBuffer::myThread() { ! return (Thread*)(((char *)this) + ! in_bytes(start_offset()) - ! in_bytes(Thread::tlab_start_offset())); } GlobalTLABStats::GlobalTLABStats() : _allocating_threads_avg(TLABAllocationWeight) {
< prev index next >