< prev index next >

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

Print this page

        

*** 372,391 **** assert(_word_size >= hs, "unexpected object size"); oopDesc::set_klass_gap(mem, 0); Copy::fill_to_aligned_words(mem + hs, _word_size - hs); } ! oop MemAllocator::finish(HeapWord* mem) const { assert(mem != NULL, "NULL object pointer"); oopDesc::set_mark_raw(mem, Klass::default_prototype_header(_klass)); // Need a release store to ensure array/class length, mark word, and // object zeroing are visible before setting the klass non-NULL, for // concurrent collectors. oopDesc::release_set_klass(mem, _klass); return oop(mem); } oop ObjAllocator::initialize(HeapWord* mem) const { mem_clear(mem); return finish(mem); } --- 372,401 ---- assert(_word_size >= hs, "unexpected object size"); oopDesc::set_klass_gap(mem, 0); Copy::fill_to_aligned_words(mem + hs, _word_size - hs); } ! inline void MemAllocator::finish_mark(HeapWord* mem) const { assert(mem != NULL, "NULL object pointer"); oopDesc::set_mark_raw(mem, Klass::default_prototype_header(_klass)); + } + + oop MemAllocator::finish(HeapWord* mem) const { + finish_mark(mem); // Need a release store to ensure array/class length, mark word, and // object zeroing are visible before setting the klass non-NULL, for // concurrent collectors. oopDesc::release_set_klass(mem, _klass); return oop(mem); } + oop MemAllocator::finish_with_properties(HeapWord* mem, ArrayStorageProperties storage_props) const { + finish_mark(mem); + oopDesc::release_set_metadata(mem, storage_props, _klass); + return oop(mem); + } + oop ObjAllocator::initialize(HeapWord* mem) const { mem_clear(mem); return finish(mem); }
*** 405,415 **** assert(_length >= 0, "length should be non-negative"); if (_do_zero) { mem_clear(mem); } arrayOopDesc::set_length(mem, _length); ! return finish(mem); } oop ClassAllocator::initialize(HeapWord* mem) const { // Set oop_size field before setting the _klass field because a // non-NULL _klass field indicates that the object is parsable by --- 415,425 ---- assert(_length >= 0, "length should be non-negative"); if (_do_zero) { mem_clear(mem); } arrayOopDesc::set_length(mem, _length); ! return finish_with_properties(mem, ArrayKlass::cast(_klass)->storage_properties()); } oop ClassAllocator::initialize(HeapWord* mem) const { // Set oop_size field before setting the _klass field because a // non-NULL _klass field indicates that the object is parsable by
< prev index next >