< prev index next >
src/hotspot/share/oops/klass.cpp
Print this page
*** 168,179 ****
#endif
ShouldNotReachHere();
return NULL;
}
! void* Klass::operator new(size_t size, ClassLoaderData* loader_data, size_t word_size, TRAPS) throw() {
! return Metaspace::allocate(loader_data, word_size, MetaspaceObj::ClassType, THREAD);
}
// "Normal" instantiation is preceeded by a MetaspaceObj allocation
// which zeros out memory - calloc equivalent.
// The constructor is also used from CppVtableCloner,
--- 168,188 ----
#endif
ShouldNotReachHere();
return NULL;
}
! void* Klass::operator new(size_t size, ClassLoaderData* loader_data, size_t word_size, bool is_value, TRAPS) throw () {
! // Pad size in case need adjust to even/odd klass ptr
! uintptr_t addr = (uintptr_t) Metaspace::allocate(loader_data, word_size + (1 << LogKlassAlignment), MetaspaceObj::ClassType, THREAD);
! // values are odd, otherwise make even (and vice versa)
! if (is_value ^ (((addr & KlassPtrValueTypeMask) >> LogKlassAlignmentInBytes) != 0)) {
! addr += (1 << LogKlassAlignmentInBytes);
! }
! assert(is_aligned(addr, (1 << LogKlassAlignmentInBytes)), "Klass base alignment incorrect");
! assert( is_value || ((addr & KlassPtrValueTypeMask) == 0), "Klass even alignment incorrect");
! assert(!is_value || ((addr & KlassPtrValueTypeMask) != 0), "Klass odd alignment incorrect");
! return (void*) addr;
}
// "Normal" instantiation is preceeded by a MetaspaceObj allocation
// which zeros out memory - calloc equivalent.
// The constructor is also used from CppVtableCloner,
< prev index next >