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