comparison src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.hpp @ 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 0166ac265d53
children 7c2386d67889
comparison
equal deleted inserted replaced
480:d249b360e026 481:7d7a7c599c17
1322 { 1322 {
1323 _start_array->allocate_block(addr); 1323 _start_array->allocate_block(addr);
1324 oop(addr)->update_contents(compaction_manager()); 1324 oop(addr)->update_contents(compaction_manager());
1325 } 1325 }
1326 1326
1327 class FillClosure: public ParMarkBitMapClosure { 1327 class FillClosure: public ParMarkBitMapClosure
1328 public: 1328 {
1329 public:
1329 FillClosure(ParCompactionManager* cm, PSParallelCompact::SpaceId space_id) : 1330 FillClosure(ParCompactionManager* cm, PSParallelCompact::SpaceId space_id) :
1330 ParMarkBitMapClosure(PSParallelCompact::mark_bitmap(), cm), 1331 ParMarkBitMapClosure(PSParallelCompact::mark_bitmap(), cm),
1331 _space_id(space_id), 1332 _start_array(PSParallelCompact::start_array(space_id))
1332 _start_array(PSParallelCompact::start_array(space_id)) { 1333 {
1333 assert(_space_id == PSParallelCompact::perm_space_id || 1334 assert(space_id == PSParallelCompact::perm_space_id ||
1334 _space_id == PSParallelCompact::old_space_id, 1335 space_id == PSParallelCompact::old_space_id,
1335 "cannot use FillClosure in the young gen"); 1336 "cannot use FillClosure in the young gen");
1336 assert(bitmap() != NULL, "need a bitmap");
1337 assert(_start_array != NULL, "need a start array");
1338 }
1339
1340 void fill_region(HeapWord* addr, size_t size) {
1341 MemRegion region(addr, size);
1342 SharedHeap::fill_region_with_object(region);
1343 _start_array->allocate_block(addr);
1344 } 1337 }
1345 1338
1346 virtual IterationStatus do_addr(HeapWord* addr, size_t size) { 1339 virtual IterationStatus do_addr(HeapWord* addr, size_t size) {
1347 fill_region(addr, size); 1340 CollectedHeap::fill_with_objects(addr, size);
1341 HeapWord* const end = addr + size;
1342 do {
1343 _start_array->allocate_block(addr);
1344 addr += oop(addr)->size();
1345 } while (addr < end);
1348 return ParMarkBitMap::incomplete; 1346 return ParMarkBitMap::incomplete;
1349 } 1347 }
1350 1348
1351 private: 1349 private:
1352 const PSParallelCompact::SpaceId _space_id; 1350 ObjectStartArray* const _start_array;
1353 ObjectStartArray* const _start_array;
1354 }; 1351 };