Mercurial > hg > graal-jvmci-8
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 }; |