< prev index next >

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

Print this page




1198   assert(0 <= v && v <= max_jlong, "value should fit: %f", v);
1199   return (jlong)v;
1200 }
1201 
1202 void ShenandoahHeap::prepare_for_verify() {
1203   if (SafepointSynchronize::is_at_safepoint() && UseTLAB) {
1204     labs_make_parsable();
1205   }
1206 }
1207 
1208 void ShenandoahHeap::gc_threads_do(ThreadClosure* tcl) const {
1209   workers()->threads_do(tcl);
1210   if (_safepoint_workers != NULL) {
1211     _safepoint_workers->threads_do(tcl);
1212   }
1213   if (ShenandoahStringDedup::is_enabled()) {
1214     ShenandoahStringDedup::threads_do(tcl);
1215   }
1216 }
1217 




1218 void ShenandoahHeap::print_tracing_info() const {
1219   LogTarget(Info, gc, stats) lt;
1220   if (lt.is_enabled()) {
1221     ResourceMark rm;
1222     LogStream ls(lt);
1223 
1224     phase_timings()->print_global_on(&ls);
1225 
1226     ls.cr();
1227     ls.cr();
1228 
1229     shenandoah_policy()->print_gc_stats(&ls);
1230 
1231     ls.cr();
1232     ls.cr();
1233   }
1234 }
1235 
1236 void ShenandoahHeap::verify(VerifyOption vo) {
1237   if (ShenandoahSafepoint::is_at_shenandoah_safepoint()) {


1324     // This populates the work stack with initial objects.
1325     // It is important to relinquish the associated locks before diving
1326     // into heap dumper.
1327     ShenandoahHeapIterationRootScanner rp;
1328     rp.roots_do(&oops);
1329   }
1330 
1331   // Work through the oop stack to traverse heap.
1332   while (! oop_stack.is_empty()) {
1333     oop obj = oop_stack.pop();
1334     assert(oopDesc::is_oop(obj), "must be a valid oop");
1335     cl->do_object(obj);
1336     obj->oop_iterate(&oops);
1337   }
1338 
1339   assert(oop_stack.is_empty(), "should be empty");
1340 
1341   if (!_aux_bitmap_region_special && !os::uncommit_memory((char*)_aux_bitmap_region.start(), _aux_bitmap_region.byte_size())) {
1342     log_warning(gc)("Could not uncommit native memory for auxiliary marking bitmap for heap iteration");
1343   }
1344 }
1345 
1346 void ShenandoahHeap::run_task(AbstractGangTask* task) {
1347   workers()->run_task(task, workers()->active_workers());
1348 }
1349 
1350 // Keep alive an object that was loaded with AS_NO_KEEPALIVE.
1351 void ShenandoahHeap::keep_alive(oop obj) {
1352   if (is_concurrent_mark_in_progress()) {
1353     ShenandoahBarrierSet::barrier_set()->enqueue(obj);
1354   }
1355 }
1356 
1357 void ShenandoahHeap::heap_region_iterate(ShenandoahHeapRegionClosure* blk) const {
1358   for (size_t i = 0; i < num_regions(); i++) {
1359     ShenandoahHeapRegion* current = get_region(i);
1360     blk->heap_region_do(current);
1361   }
1362 }
1363 
1364 class ShenandoahParallelHeapRegionTask : public AbstractGangTask {
1365 private:
1366   ShenandoahHeap* const _heap;
1367   ShenandoahHeapRegionClosure* const _blk;




1198   assert(0 <= v && v <= max_jlong, "value should fit: %f", v);
1199   return (jlong)v;
1200 }
1201 
1202 void ShenandoahHeap::prepare_for_verify() {
1203   if (SafepointSynchronize::is_at_safepoint() && UseTLAB) {
1204     labs_make_parsable();
1205   }
1206 }
1207 
1208 void ShenandoahHeap::gc_threads_do(ThreadClosure* tcl) const {
1209   workers()->threads_do(tcl);
1210   if (_safepoint_workers != NULL) {
1211     _safepoint_workers->threads_do(tcl);
1212   }
1213   if (ShenandoahStringDedup::is_enabled()) {
1214     ShenandoahStringDedup::threads_do(tcl);
1215   }
1216 }
1217 
1218 void ShenandoahHeap::run_task(AbstractGangTask* task) {
1219   workers()->run_task(task, workers()->active_workers());
1220 }
1221 
1222 void ShenandoahHeap::print_tracing_info() const {
1223   LogTarget(Info, gc, stats) lt;
1224   if (lt.is_enabled()) {
1225     ResourceMark rm;
1226     LogStream ls(lt);
1227 
1228     phase_timings()->print_global_on(&ls);
1229 
1230     ls.cr();
1231     ls.cr();
1232 
1233     shenandoah_policy()->print_gc_stats(&ls);
1234 
1235     ls.cr();
1236     ls.cr();
1237   }
1238 }
1239 
1240 void ShenandoahHeap::verify(VerifyOption vo) {
1241   if (ShenandoahSafepoint::is_at_shenandoah_safepoint()) {


1328     // This populates the work stack with initial objects.
1329     // It is important to relinquish the associated locks before diving
1330     // into heap dumper.
1331     ShenandoahHeapIterationRootScanner rp;
1332     rp.roots_do(&oops);
1333   }
1334 
1335   // Work through the oop stack to traverse heap.
1336   while (! oop_stack.is_empty()) {
1337     oop obj = oop_stack.pop();
1338     assert(oopDesc::is_oop(obj), "must be a valid oop");
1339     cl->do_object(obj);
1340     obj->oop_iterate(&oops);
1341   }
1342 
1343   assert(oop_stack.is_empty(), "should be empty");
1344 
1345   if (!_aux_bitmap_region_special && !os::uncommit_memory((char*)_aux_bitmap_region.start(), _aux_bitmap_region.byte_size())) {
1346     log_warning(gc)("Could not uncommit native memory for auxiliary marking bitmap for heap iteration");
1347   }




1348 }
1349 
1350 // Keep alive an object that was loaded with AS_NO_KEEPALIVE.
1351 void ShenandoahHeap::keep_alive(oop obj) {
1352   if (is_concurrent_mark_in_progress()) {
1353     ShenandoahBarrierSet::barrier_set()->enqueue(obj);
1354   }
1355 }
1356 
1357 void ShenandoahHeap::heap_region_iterate(ShenandoahHeapRegionClosure* blk) const {
1358   for (size_t i = 0; i < num_regions(); i++) {
1359     ShenandoahHeapRegion* current = get_region(i);
1360     blk->heap_region_do(current);
1361   }
1362 }
1363 
1364 class ShenandoahParallelHeapRegionTask : public AbstractGangTask {
1365 private:
1366   ShenandoahHeap* const _heap;
1367   ShenandoahHeapRegionClosure* const _blk;


< prev index next >