< prev index next >

src/share/vm/memory/threadLocalAllocBuffer.cpp

Print this page

        

*** 51,60 **** --- 51,62 ---- for (JavaThread *thread = Threads::first(); thread != NULL; thread = thread->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(); if (PrintTLAB) { global_stats()->print();
*** 66,76 **** 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; if (PrintTLAB && (_number_of_refills > 0 || Verbose)) { print_stats("gc"); --- 68,78 ---- 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; if (PrintTLAB && (_number_of_refills > 0 || Verbose)) { print_stats("gc");
*** 113,123 **** void ThreadLocalAllocBuffer::make_parsable(bool retire) { if (end() != NULL) { invariants(); if (retire) { ! myThread()->incr_allocated_bytes(used_bytes()); } CollectedHeap::fill_with_object(top(), hard_end(), retire); if (retire || ZeroTLAB) { // "Reset" the TLAB --- 115,129 ---- void ThreadLocalAllocBuffer::make_parsable(bool retire) { if (end() != NULL) { invariants(); if (retire) { ! if (_gclab) { ! myThread()->incr_allocated_bytes_gclab(used_bytes()); ! } else { ! myThread()->incr_allocated_bytes(used_bytes()); ! } } CollectedHeap::fill_with_object(top(), hard_end(), retire); if (retire || ZeroTLAB) { // "Reset" the TLAB
*** 191,201 **** set_pf_top(top); set_end(end); invariants(); } ! void ThreadLocalAllocBuffer::initialize() { initialize(NULL, // start NULL, // top NULL); // end set_desired_size(initial_desired_size()); --- 197,209 ---- 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());
*** 224,234 **** _global_stats = new GlobalTLABStats(); // 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(); if (PrintTLAB && Verbose) { gclog_or_tty->print("TLAB min: " SIZE_FORMAT " initial: " SIZE_FORMAT " max: " SIZE_FORMAT "\n", min_size(), Thread::current()->tlab().initial_desired_size(), max_size()); } --- 232,245 ---- _global_stats = new GlobalTLABStats(); // 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); ! if (UseShenandoahGC) { ! Thread::current()->gclab().initialize(true); ! } if (PrintTLAB && Verbose) { gclog_or_tty->print("TLAB min: " SIZE_FORMAT " initial: " SIZE_FORMAT " max: " SIZE_FORMAT "\n", min_size(), Thread::current()->tlab().initial_desired_size(), max_size()); }
*** 256,271 **** size_t waste = _gc_waste + _slow_refill_waste + _fast_refill_waste; size_t alloc = _number_of_refills * _desired_size; double waste_percent = alloc == 0 ? 0.0 : 100.0 * waste / alloc; size_t tlab_used = Universe::heap()->tlab_used(thrd); ! gclog_or_tty->print("TLAB: %s thread: " INTPTR_FORMAT " [id: %2d]" " desired_size: " SIZE_FORMAT "KB" " slow allocs: %d refill waste: " SIZE_FORMAT "B" " alloc:%8.5f %8.0fKB refills: %d waste %4.1f%% gc: %dB" " slow: %dB fast: %dB\n", ! tag, thrd, thrd->osthread()->thread_id(), _desired_size / (K / HeapWordSize), _slow_allocations, _refill_waste_limit * HeapWordSize, _allocation_fraction.average(), _allocation_fraction.average() * tlab_used / K, _number_of_refills, waste_percent, --- 267,282 ---- size_t waste = _gc_waste + _slow_refill_waste + _fast_refill_waste; size_t alloc = _number_of_refills * _desired_size; double waste_percent = alloc == 0 ? 0.0 : 100.0 * waste / alloc; size_t tlab_used = Universe::heap()->tlab_used(thrd); ! gclog_or_tty->print("TLAB: %s %s thread: " INTPTR_FORMAT " [id: %2d]" " desired_size: " SIZE_FORMAT "KB" " slow allocs: %d refill waste: " SIZE_FORMAT "B" " alloc:%8.5f %8.0fKB refills: %d waste %4.1f%% gc: %dB" " slow: %dB fast: %dB\n", ! tag, _gclab ? "gclab" : "tlab ", p2i(thrd), thrd->osthread()->thread_id(), _desired_size / (K / HeapWordSize), _slow_allocations, _refill_waste_limit * HeapWordSize, _allocation_fraction.average(), _allocation_fraction.average() * tlab_used / K, _number_of_refills, waste_percent,
*** 285,297 **** } 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) { --- 296,321 ---- } 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; ! } ! ! 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) {
< prev index next >