< 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 >