hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.hpp
changeset 1668 8ec481b8f514
parent 1408 e9c4f37aed49
child 1669 c921639400dd
equal deleted inserted replaced
1667:fc79935c3055 1668:8ec481b8f514
  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 };