comparison src/share/vm/memory/space.cpp @ 481:7d7a7c599c17

6578152: fill_region_with_object has usability and safety issues Reviewed-by: apetrusenko, ysr
author jcoomes
date Thu, 11 Dec 2008 12:05:08 -0800
parents 122d10c82f3f
children e9be0e04635a
comparison
equal deleted inserted replaced
480:d249b360e026 481:7d7a7c599c17
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;