< prev index next >

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

Print this page
rev 47590 : [mq]: heap8
rev 47591 : [mq]: heap10a
rev 47592 : [mq]: heap14_rebased

*** 289,305 **** } #endif void CollectedHeap::sample_allocation(Thread* thread, HeapWord* obj, ! size_t size, size_t fix_sample_rate) { // Object is allocated, sample it now. HeapMonitoring::object_alloc_do_sample(thread, reinterpret_cast<oopDesc*>(obj), size * HeapWordSize); // Pick a next sample in this case, we allocated right. ! thread->tlab().pick_next_sample(fix_sample_rate); } HeapWord* CollectedHeap::allocate_sampled_object(Thread* thread, size_t size) { thread->tlab().set_back_actual_end(); --- 289,305 ---- } #endif void CollectedHeap::sample_allocation(Thread* thread, HeapWord* obj, ! size_t size, size_t overflowed_words) { // Object is allocated, sample it now. HeapMonitoring::object_alloc_do_sample(thread, reinterpret_cast<oopDesc*>(obj), size * HeapWordSize); // Pick a next sample in this case, we allocated right. ! thread->tlab().pick_next_sample(overflowed_words); } HeapWord* CollectedHeap::allocate_sampled_object(Thread* thread, size_t size) { thread->tlab().set_back_actual_end();
*** 307,331 **** return thread->tlab().allocate(size); } HeapWord* CollectedHeap::allocate_from_tlab_slow(Klass* klass, Thread* thread, size_t size) { // In case the tlab changes, remember if this one wanted a sample. ! bool should_sample = thread->tlab().should_sample() && HeapMonitoring::enabled(); HeapWord* obj = NULL; if (should_sample) { // Remember the tlab end to fix up the sampling rate. HeapWord *tlab_old_end = thread->tlab().end(); obj = allocate_sampled_object(thread, size); // If we did allocate in this tlab, sample it. Otherwise, we wait for the // new tlab's first allocation at the end of this method. if (obj != NULL) { ! // Fix sample rate by removing the extra bytes allocated in this last // sample. ! size_t fix_sample_rate = thread->tlab().top() - tlab_old_end; ! sample_allocation(thread, obj, size, fix_sample_rate); return obj; } } // Retain tlab and allocate object in shared space if --- 307,331 ---- return thread->tlab().allocate(size); } HeapWord* CollectedHeap::allocate_from_tlab_slow(Klass* klass, Thread* thread, size_t size) { // In case the tlab changes, remember if this one wanted a sample. ! bool should_sample = HeapMonitoring::enabled() && thread->tlab().should_sample(); HeapWord* obj = NULL; if (should_sample) { // Remember the tlab end to fix up the sampling rate. HeapWord *tlab_old_end = thread->tlab().end(); obj = allocate_sampled_object(thread, size); // If we did allocate in this tlab, sample it. Otherwise, we wait for the // new tlab's first allocation at the end of this method. if (obj != NULL) { ! // Fix sample rate by removing the extra words allocated in this last // sample. ! size_t overflowed_words = pointer_delta(thread->tlab().top(), tlab_old_end); ! sample_allocation(thread, obj, size, overflowed_words); return obj; } } // Retain tlab and allocate object in shared space if
< prev index next >