407 |
407 |
408 bool CompactibleSpace::insert_deadspace(size_t& allowed_deadspace_words, |
408 bool CompactibleSpace::insert_deadspace(size_t& allowed_deadspace_words, |
409 HeapWord* q, size_t deadlength) { |
409 HeapWord* q, size_t deadlength) { |
410 if (allowed_deadspace_words >= deadlength) { |
410 if (allowed_deadspace_words >= deadlength) { |
411 allowed_deadspace_words -= deadlength; |
411 allowed_deadspace_words -= deadlength; |
412 oop(q)->set_mark(markOopDesc::prototype()->set_marked()); |
412 CollectedHeap::fill_with_object(q, deadlength); |
413 const size_t min_int_array_size = typeArrayOopDesc::header_size(T_INT); |
413 oop(q)->set_mark(oop(q)->mark()->set_marked()); |
414 if (deadlength >= min_int_array_size) { |
414 assert((int) deadlength == oop(q)->size(), "bad filler object size"); |
415 oop(q)->set_klass(Universe::intArrayKlassObj()); |
|
416 typeArrayOop(q)->set_length((int)((deadlength - min_int_array_size) |
|
417 * (HeapWordSize/sizeof(jint)))); |
|
418 } else { |
|
419 assert((int) deadlength == instanceOopDesc::header_size(), |
|
420 "size for smallest fake dead object doesn't match"); |
|
421 oop(q)->set_klass(SystemDictionary::object_klass()); |
|
422 } |
|
423 assert((int) deadlength == oop(q)->size(), |
|
424 "make sure size for fake dead object match"); |
|
425 // Recall that we required "q == compaction_top". |
415 // Recall that we required "q == compaction_top". |
426 return true; |
416 return true; |
427 } else { |
417 } else { |
428 allowed_deadspace_words = 0; |
418 allowed_deadspace_words = 0; |
429 return false; |
419 return false; |