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