< prev index next >

src/share/vm/gc/shared/collectedHeap.inline.hpp

Print this page




 232   post_allocation_setup_array(klass, obj, length);
 233 #ifndef PRODUCT
 234   const size_t hs = oopDesc::header_size()+1;
 235   Universe::heap()->check_for_non_bad_heap_word_value(obj+hs, size-hs);
 236 #endif
 237   return (oop)obj;
 238 }
 239 
 240 inline HeapWord* CollectedHeap::align_allocation_or_fail(HeapWord* addr,
 241                                                          HeapWord* end,
 242                                                          unsigned short alignment_in_bytes) {
 243   if (alignment_in_bytes <= ObjectAlignmentInBytes) {
 244     return addr;
 245   }
 246 
 247   assert(is_ptr_aligned(addr, HeapWordSize),
 248          "Address " PTR_FORMAT " is not properly aligned.", p2i(addr));
 249   assert(is_size_aligned(alignment_in_bytes, HeapWordSize),
 250          "Alignment size %u is incorrect.", alignment_in_bytes);
 251 
 252   HeapWord* new_addr = (HeapWord*) align_pointer_up(addr, alignment_in_bytes);
 253   size_t padding = pointer_delta(new_addr, addr);
 254 
 255   if (padding == 0) {
 256     return addr;
 257   }
 258 
 259   if (padding < CollectedHeap::min_fill_size()) {
 260     padding += alignment_in_bytes / HeapWordSize;
 261     assert(padding >= CollectedHeap::min_fill_size(),
 262            "alignment_in_bytes %u is expect to be larger "
 263            "than the minimum object size", alignment_in_bytes);
 264     new_addr = addr + padding;
 265   }
 266 
 267   assert(new_addr > addr, "Unexpected arithmetic overflow "
 268          PTR_FORMAT " not greater than " PTR_FORMAT, p2i(new_addr), p2i(addr));
 269   if(new_addr < end) {
 270     CollectedHeap::fill_with_object(addr, padding);
 271     return new_addr;
 272   } else {




 232   post_allocation_setup_array(klass, obj, length);
 233 #ifndef PRODUCT
 234   const size_t hs = oopDesc::header_size()+1;
 235   Universe::heap()->check_for_non_bad_heap_word_value(obj+hs, size-hs);
 236 #endif
 237   return (oop)obj;
 238 }
 239 
 240 inline HeapWord* CollectedHeap::align_allocation_or_fail(HeapWord* addr,
 241                                                          HeapWord* end,
 242                                                          unsigned short alignment_in_bytes) {
 243   if (alignment_in_bytes <= ObjectAlignmentInBytes) {
 244     return addr;
 245   }
 246 
 247   assert(is_ptr_aligned(addr, HeapWordSize),
 248          "Address " PTR_FORMAT " is not properly aligned.", p2i(addr));
 249   assert(is_size_aligned(alignment_in_bytes, HeapWordSize),
 250          "Alignment size %u is incorrect.", alignment_in_bytes);
 251 
 252   HeapWord* new_addr = (HeapWord*) align_ptr_up(addr, alignment_in_bytes);
 253   size_t padding = pointer_delta(new_addr, addr);
 254 
 255   if (padding == 0) {
 256     return addr;
 257   }
 258 
 259   if (padding < CollectedHeap::min_fill_size()) {
 260     padding += alignment_in_bytes / HeapWordSize;
 261     assert(padding >= CollectedHeap::min_fill_size(),
 262            "alignment_in_bytes %u is expect to be larger "
 263            "than the minimum object size", alignment_in_bytes);
 264     new_addr = addr + padding;
 265   }
 266 
 267   assert(new_addr > addr, "Unexpected arithmetic overflow "
 268          PTR_FORMAT " not greater than " PTR_FORMAT, p2i(new_addr), p2i(addr));
 269   if(new_addr < end) {
 270     CollectedHeap::fill_with_object(addr, padding);
 271     return new_addr;
 272   } else {


< prev index next >