< prev index next >

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

Print this page




 384   assert(mem != NULL, "NULL object pointer");
 385   oopDesc::set_mark_raw(mem, Klass::default_prototype_header(_klass));
 386   // Need a release store to ensure array/class length, mark word, and
 387   // object zeroing are visible before setting the klass non-NULL, for
 388   // concurrent collectors.
 389   oopDesc::release_set_klass(mem, _klass);
 390   return oop(mem);
 391 }
 392 
 393 oop MemAllocator::finish_with_properties(HeapWord* mem, ArrayStorageProperties storage_props) const {
 394   finish(mem);
 395   oopDesc::release_set_metadata(mem, storage_props, _klass);
 396   return oop(mem);
 397 }
 398 
 399 oop ObjAllocator::initialize(HeapWord* mem) const {
 400   mem_clear(mem);
 401   return finish(mem);
 402 }
 403 






 404 MemRegion ObjArrayAllocator::obj_memory_range(oop obj) const {
 405   if (_do_zero) {
 406     return MemAllocator::obj_memory_range(obj);
 407   }
 408   ArrayKlass* array_klass = ArrayKlass::cast(_klass);
 409   const size_t hs = arrayOopDesc::header_size(array_klass->element_type());
 410   return MemRegion(((HeapWord*)obj) + hs, _word_size - hs);
 411 }
 412 
 413 oop ObjArrayAllocator::initialize(HeapWord* mem) const {
 414   // Set array length before setting the _klass field because a
 415   // non-NULL klass field indicates that the object is parsable by
 416   // concurrent GC.
 417   assert(_length >= 0, "length should be non-negative");
 418   if (_do_zero) {
 419     mem_clear(mem);
 420   }
 421   arrayOopDesc::set_length(mem, _length);
 422   assert(ArrayKlass::cast(_klass)->storage_properties().is_empty() ||
 423       ArrayKlass::cast(_klass)->dimension() == 1, "Multidim should have no storage props");


 384   assert(mem != NULL, "NULL object pointer");
 385   oopDesc::set_mark_raw(mem, Klass::default_prototype_header(_klass));
 386   // Need a release store to ensure array/class length, mark word, and
 387   // object zeroing are visible before setting the klass non-NULL, for
 388   // concurrent collectors.
 389   oopDesc::release_set_klass(mem, _klass);
 390   return oop(mem);
 391 }
 392 
 393 oop MemAllocator::finish_with_properties(HeapWord* mem, ArrayStorageProperties storage_props) const {
 394   finish(mem);
 395   oopDesc::release_set_metadata(mem, storage_props, _klass);
 396   return oop(mem);
 397 }
 398 
 399 oop ObjAllocator::initialize(HeapWord* mem) const {
 400   mem_clear(mem);
 401   return finish(mem);
 402 }
 403 
 404 oop ObjBufferAllocator::initialize(HeapWord* mem) const {
 405   oopDesc::set_klass_gap(mem, 0);
 406   return finish(mem);
 407 }
 408 
 409 
 410 MemRegion ObjArrayAllocator::obj_memory_range(oop obj) const {
 411   if (_do_zero) {
 412     return MemAllocator::obj_memory_range(obj);
 413   }
 414   ArrayKlass* array_klass = ArrayKlass::cast(_klass);
 415   const size_t hs = arrayOopDesc::header_size(array_klass->element_type());
 416   return MemRegion(((HeapWord*)obj) + hs, _word_size - hs);
 417 }
 418 
 419 oop ObjArrayAllocator::initialize(HeapWord* mem) const {
 420   // Set array length before setting the _klass field because a
 421   // non-NULL klass field indicates that the object is parsable by
 422   // concurrent GC.
 423   assert(_length >= 0, "length should be non-negative");
 424   if (_do_zero) {
 425     mem_clear(mem);
 426   }
 427   arrayOopDesc::set_length(mem, _length);
 428   assert(ArrayKlass::cast(_klass)->storage_properties().is_empty() ||
 429       ArrayKlass::cast(_klass)->dimension() == 1, "Multidim should have no storage props");
< prev index next >