comparison src/share/vm/gc_implementation/parallelScavenge/psMarkSweepDecorator.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 0fbdb4381b99
comparison
equal deleted inserted replaced
480:d249b360e026 481:7d7a7c599c17
273 273
274 bool PSMarkSweepDecorator::insert_deadspace(size_t& allowed_deadspace_words, 274 bool PSMarkSweepDecorator::insert_deadspace(size_t& allowed_deadspace_words,
275 HeapWord* q, size_t deadlength) { 275 HeapWord* q, size_t deadlength) {
276 if (allowed_deadspace_words >= deadlength) { 276 if (allowed_deadspace_words >= deadlength) {
277 allowed_deadspace_words -= deadlength; 277 allowed_deadspace_words -= deadlength;
278 oop(q)->set_mark(markOopDesc::prototype()->set_marked()); 278 CollectedHeap::fill_with_object(q, deadlength);
279 const size_t aligned_min_int_array_size = 279 oop(q)->set_mark(oop(q)->mark()->set_marked());
280 align_object_size(typeArrayOopDesc::header_size(T_INT)); 280 assert((int) deadlength == oop(q)->size(), "bad filler object size");
281 if (deadlength >= aligned_min_int_array_size) {
282 oop(q)->set_klass(Universe::intArrayKlassObj());
283 assert(((deadlength - aligned_min_int_array_size) * (HeapWordSize/sizeof(jint))) < (size_t)max_jint,
284 "deadspace too big for Arrayoop");
285 typeArrayOop(q)->set_length((int)((deadlength - aligned_min_int_array_size)
286 * (HeapWordSize/sizeof(jint))));
287 } else {
288 assert((int) deadlength == instanceOopDesc::header_size(),
289 "size for smallest fake dead object doesn't match");
290 oop(q)->set_klass(SystemDictionary::object_klass());
291 }
292 assert((int) deadlength == oop(q)->size(),
293 "make sure size for fake dead object match");
294 // Recall that we required "q == compaction_top". 281 // Recall that we required "q == compaction_top".
295 return true; 282 return true;
296 } else { 283 } else {
297 allowed_deadspace_words = 0; 284 allowed_deadspace_words = 0;
298 return false; 285 return false;