< prev index next >

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

Print this page

424   const size_t length_in_bytes = static_cast<size_t>(_length) << ArrayKlass::cast(_klass)->log2_element_size();
425   const BasicType element_type = ArrayKlass::cast(_klass)->element_type();
426   const size_t base_offset_in_bytes = arrayOopDesc::base_offset_in_bytes(element_type);
427   const size_t size_in_bytes = _word_size * BytesPerWord;
428 
429   const address obj_end = reinterpret_cast<address>(mem) + size_in_bytes;
430   const address base = reinterpret_cast<address>(mem) + base_offset_in_bytes;
431   const address elements_end = base + length_in_bytes;
432   assert(elements_end <= obj_end, "payload must fit in object");
433   if (elements_end < obj_end) {
434     const size_t padding_in_bytes = obj_end - elements_end;
435     Copy::fill_to_bytes(elements_end, padding_in_bytes, heapPaddingByteVal);
436   }
437 }
438 #endif
439 
440 oop ClassAllocator::initialize(HeapWord* mem) const {
441   // Set oop_size field before setting the _klass field because a
442   // non-null _klass field indicates that the object is parsable by
443   // concurrent GC.
444   assert(_word_size > 0, "oop_size must be positive.");
445   mem_clear(mem);
446   java_lang_Class::set_oop_size(mem, _word_size);
447   return finish(mem);
448 }

424   const size_t length_in_bytes = static_cast<size_t>(_length) << ArrayKlass::cast(_klass)->log2_element_size();
425   const BasicType element_type = ArrayKlass::cast(_klass)->element_type();
426   const size_t base_offset_in_bytes = arrayOopDesc::base_offset_in_bytes(element_type);
427   const size_t size_in_bytes = _word_size * BytesPerWord;
428 
429   const address obj_end = reinterpret_cast<address>(mem) + size_in_bytes;
430   const address base = reinterpret_cast<address>(mem) + base_offset_in_bytes;
431   const address elements_end = base + length_in_bytes;
432   assert(elements_end <= obj_end, "payload must fit in object");
433   if (elements_end < obj_end) {
434     const size_t padding_in_bytes = obj_end - elements_end;
435     Copy::fill_to_bytes(elements_end, padding_in_bytes, heapPaddingByteVal);
436   }
437 }
438 #endif
439 
440 oop ClassAllocator::initialize(HeapWord* mem) const {
441   // Set oop_size field before setting the _klass field because a
442   // non-null _klass field indicates that the object is parsable by
443   // concurrent GC.
444   assert(_base_size > 0, "oop_size must be positive.");
445   mem_clear(mem);
446   java_lang_Class::set_oop_size(mem, _base_size);
447   return finish(mem);
448 }
< prev index next >