--- old/src/hotspot/share/gc/shared/collectedHeap.inline.hpp 2018-05-13 17:59:39.361274475 +0200 +++ new/src/hotspot/share/gc/shared/collectedHeap.inline.hpp 2018-05-13 17:59:39.188277482 +0200 @@ -137,18 +137,9 @@ return NULL; // caller does a CHECK_0 too } - HeapWord* result = NULL; - if (UseTLAB) { - result = allocate_from_tlab(klass, THREAD, size); - if (result != NULL) { - assert(!HAS_PENDING_EXCEPTION, - "Unexpected exception, will result in uninitialized storage"); - return result; - } - } bool gc_overhead_limit_was_exceeded = false; - result = Universe::heap()->mem_allocate(size, - &gc_overhead_limit_was_exceeded); + HeapWord* result = Universe::heap()->mem_allocate(size, klass, THREAD, + &gc_overhead_limit_was_exceeded); if (result != NULL) { NOT_PRODUCT(Universe::heap()-> check_for_non_bad_heap_word_value(result, size)); @@ -194,16 +185,22 @@ } HeapWord* CollectedHeap::allocate_from_tlab(Klass* klass, Thread* thread, size_t size) { - assert(UseTLAB, "should use UseTLAB"); - - size += Universe::heap()->oop_extra_words(); - HeapWord* obj = thread->tlab().allocate(size); - if (obj != NULL) { - obj = Universe::heap()->tlab_post_allocation_setup(obj); + if (UseTLAB) { + HeapWord* obj = thread->tlab().allocate(size); + if (obj != NULL) { + assert(!thread->has_pending_exception(), + "Unexpected exception, will result in uninitialized storage"); + return obj; + } + // Otherwise... + obj = allocate_from_tlab_slow(klass, thread, size); + if (obj != NULL) { + assert(!thread->has_pending_exception(), + "Unexpected exception, will result in uninitialized storage"); + } return obj; } - // Otherwise... - return allocate_from_tlab_slow(klass, thread, size); + return NULL; } void CollectedHeap::init_obj(HeapWord* obj, size_t size) {