--- old/src/hotspot/share/oops/valueKlass.cpp 2019-11-22 13:54:15.216164320 +0100 +++ new/src/hotspot/share/oops/valueKlass.cpp 2019-11-22 13:54:14.924159384 +0100 @@ -130,6 +130,14 @@ return oop; } +instanceOop ValueKlass::allocate_instance_buffer(TRAPS) { + int size = size_helper(); // Query before forming handle. + + instanceOop oop = (instanceOop)Universe::heap()->obj_buffer_allocate(this, size, CHECK_NULL); + assert(oop->mark().is_always_locked(), "Unlocked value type"); + return oop; +} + bool ValueKlass::is_atomic() { return (nonstatic_field_size() * heapOopSize) <= longSize; } @@ -153,7 +161,7 @@ res = (instanceOop)default_value(); } else { Handle obj_h(THREAD, obj); - res = allocate_instance(CHECK_NULL); + res = allocate_instance_buffer(CHECK_NULL); value_copy_payload_to_new_oop(((char*)(oopDesc*)obj_h()) + offset, res); } assert(res != NULL, "Must be set in one of two paths above");