< prev index next >

src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp

Print this page




1297   ShenandoahHeapIterationRootScanner rp;
1298   ObjectIterateScanRootClosure oops(&_aux_bit_map, &oop_stack);
1299 
1300   rp.roots_do(&oops);
1301 
1302   // Work through the oop stack to traverse heap.
1303   while (! oop_stack.is_empty()) {
1304     oop obj = oop_stack.pop();
1305     assert(oopDesc::is_oop(obj), "must be a valid oop");
1306     cl->do_object(obj);
1307     obj->oop_iterate(&oops);
1308   }
1309 
1310   assert(oop_stack.is_empty(), "should be empty");
1311 
1312   if (!_aux_bitmap_region_special && !os::uncommit_memory((char*)_aux_bitmap_region.start(), _aux_bitmap_region.byte_size())) {
1313     log_warning(gc)("Could not uncommit native memory for auxiliary marking bitmap for heap iteration");
1314   }
1315 }
1316 
1317 Tickspan ShenandoahHeap::run_task(AbstractGangTask* task) {
1318   Ticks start = Ticks::now();
1319   workers()->run_task(task, workers()->active_workers());
1320   return Ticks::now() - start;
1321 }
1322 
1323 // Keep alive an object that was loaded with AS_NO_KEEPALIVE.
1324 void ShenandoahHeap::keep_alive(oop obj) {
1325   if (is_concurrent_mark_in_progress()) {
1326     ShenandoahBarrierSet::barrier_set()->enqueue(obj);
1327   }
1328 }
1329 
1330 void ShenandoahHeap::heap_region_iterate(ShenandoahHeapRegionClosure* blk) const {
1331   for (size_t i = 0; i < num_regions(); i++) {
1332     ShenandoahHeapRegion* current = get_region(i);
1333     blk->heap_region_do(current);
1334   }
1335 }
1336 
1337 class ShenandoahParallelHeapRegionTask : public AbstractGangTask {
1338 private:
1339   ShenandoahHeap* const _heap;
1340   ShenandoahHeapRegionClosure* const _blk;




1297   ShenandoahHeapIterationRootScanner rp;
1298   ObjectIterateScanRootClosure oops(&_aux_bit_map, &oop_stack);
1299 
1300   rp.roots_do(&oops);
1301 
1302   // Work through the oop stack to traverse heap.
1303   while (! oop_stack.is_empty()) {
1304     oop obj = oop_stack.pop();
1305     assert(oopDesc::is_oop(obj), "must be a valid oop");
1306     cl->do_object(obj);
1307     obj->oop_iterate(&oops);
1308   }
1309 
1310   assert(oop_stack.is_empty(), "should be empty");
1311 
1312   if (!_aux_bitmap_region_special && !os::uncommit_memory((char*)_aux_bitmap_region.start(), _aux_bitmap_region.byte_size())) {
1313     log_warning(gc)("Could not uncommit native memory for auxiliary marking bitmap for heap iteration");
1314   }
1315 }
1316 
1317 void ShenandoahHeap::run_task(AbstractGangTask* task) {

1318   workers()->run_task(task, workers()->active_workers());

1319 }
1320 
1321 // Keep alive an object that was loaded with AS_NO_KEEPALIVE.
1322 void ShenandoahHeap::keep_alive(oop obj) {
1323   if (is_concurrent_mark_in_progress()) {
1324     ShenandoahBarrierSet::barrier_set()->enqueue(obj);
1325   }
1326 }
1327 
1328 void ShenandoahHeap::heap_region_iterate(ShenandoahHeapRegionClosure* blk) const {
1329   for (size_t i = 0; i < num_regions(); i++) {
1330     ShenandoahHeapRegion* current = get_region(i);
1331     blk->heap_region_do(current);
1332   }
1333 }
1334 
1335 class ShenandoahParallelHeapRegionTask : public AbstractGangTask {
1336 private:
1337   ShenandoahHeap* const _heap;
1338   ShenandoahHeapRegionClosure* const _blk;


< prev index next >