< prev index next >

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

Print this page




 359   {
 360     Allocation allocation(*this, &obj);
 361     HeapWord* mem = mem_allocate(allocation);
 362     if (mem != NULL) {
 363       obj = initialize(mem);
 364     }
 365   }
 366   return obj;
 367 }
 368 
 369 void MemAllocator::mem_clear(HeapWord* mem) const {
 370   assert(mem != NULL, "cannot initialize NULL object");
 371   const size_t hs = oopDesc::header_size();
 372   assert(_word_size >= hs, "unexpected object size");
 373   oopDesc::set_klass_gap(mem, 0);
 374   Copy::fill_to_aligned_words(mem + hs, _word_size - hs);
 375 }
 376 
 377 oop MemAllocator::finish(HeapWord* mem) const {
 378   assert(mem != NULL, "NULL object pointer");
 379   if (UseBiasedLocking) {
 380     oopDesc::set_mark_raw(mem, _klass->prototype_header());
 381   } else {
 382     // May be bootstrapping
 383     oopDesc::set_mark_raw(mem, markOopDesc::prototype());
 384   }
 385   // Need a release store to ensure array/class length, mark word, and
 386   // object zeroing are visible before setting the klass non-NULL, for
 387   // concurrent collectors.
 388   oopDesc::release_set_klass(mem, _klass);
 389   return oop(mem);
 390 }
 391 
 392 oop ObjAllocator::initialize(HeapWord* mem) const {
 393   mem_clear(mem);
 394   return finish(mem);
 395 }
 396 
 397 MemRegion ObjArrayAllocator::obj_memory_range(oop obj) const {
 398   if (_do_zero) {
 399     return MemAllocator::obj_memory_range(obj);
 400   }
 401   ArrayKlass* array_klass = ArrayKlass::cast(_klass);
 402   const size_t hs = arrayOopDesc::header_size(array_klass->element_type());
 403   return MemRegion(((HeapWord*)obj) + hs, _word_size - hs);
 404 }




 359   {
 360     Allocation allocation(*this, &obj);
 361     HeapWord* mem = mem_allocate(allocation);
 362     if (mem != NULL) {
 363       obj = initialize(mem);
 364     }
 365   }
 366   return obj;
 367 }
 368 
 369 void MemAllocator::mem_clear(HeapWord* mem) const {
 370   assert(mem != NULL, "cannot initialize NULL object");
 371   const size_t hs = oopDesc::header_size();
 372   assert(_word_size >= hs, "unexpected object size");
 373   oopDesc::set_klass_gap(mem, 0);
 374   Copy::fill_to_aligned_words(mem + hs, _word_size - hs);
 375 }
 376 
 377 oop MemAllocator::finish(HeapWord* mem) const {
 378   assert(mem != NULL, "NULL object pointer");
 379   oopDesc::set_mark_raw(mem, Klass::default_prototype_header(_klass));





 380   // Need a release store to ensure array/class length, mark word, and
 381   // object zeroing are visible before setting the klass non-NULL, for
 382   // concurrent collectors.
 383   oopDesc::release_set_klass(mem, _klass);
 384   return oop(mem);
 385 }
 386 
 387 oop ObjAllocator::initialize(HeapWord* mem) const {
 388   mem_clear(mem);
 389   return finish(mem);
 390 }
 391 
 392 MemRegion ObjArrayAllocator::obj_memory_range(oop obj) const {
 393   if (_do_zero) {
 394     return MemAllocator::obj_memory_range(obj);
 395   }
 396   ArrayKlass* array_klass = ArrayKlass::cast(_klass);
 397   const size_t hs = arrayOopDesc::header_size(array_klass->element_type());
 398   return MemRegion(((HeapWord*)obj) + hs, _word_size - hs);
 399 }


< prev index next >