< prev index next >

src/hotspot/share/gc/g1/g1ConcurrentMark.cpp

Print this page




1266     AbstractGangTask("G1 Cleanup"),
1267     _g1h(g1h),
1268     _cleanup_list(cleanup_list),
1269     _hrclaimer(n_workers) {
1270 
1271     HeapRegionRemSet::reset_for_cleanup_tasks();
1272   }
1273 
1274   void work(uint worker_id) {
1275     FreeRegionList local_cleanup_list("Local Cleanup List");
1276     HRRSCleanupTask hrrs_cleanup_task;
1277     G1ReclaimEmptyRegionsClosure cl(_g1h,
1278                                     &local_cleanup_list,
1279                                     &hrrs_cleanup_task);
1280     _g1h->heap_region_par_iterate_from_worker_offset(&cl, &_hrclaimer, worker_id);
1281     assert(cl.is_complete(), "Shouldn't have aborted!");
1282 
1283     // Now update the old/humongous region sets
1284     _g1h->remove_from_old_sets(cl.old_regions_removed(), cl.humongous_regions_removed());
1285     {
1286       MutexLockerEx x(ParGCRareEvent_lock, Mutex::_no_safepoint_check_flag);
1287       _g1h->decrement_summary_bytes(cl.freed_bytes());
1288 
1289       _cleanup_list->add_ordered(&local_cleanup_list);
1290       assert(local_cleanup_list.is_empty(), "post-condition");
1291 
1292       HeapRegionRemSet::finish_cleanup_task(&hrrs_cleanup_task);
1293     }
1294   }
1295 };
1296 
1297 void G1ConcurrentMark::reclaim_empty_regions() {
1298   WorkGang* workers = _g1h->workers();
1299   FreeRegionList empty_regions_list("Empty Regions After Mark List");
1300 
1301   G1ReclaimEmptyRegionsTask cl(_g1h, &empty_regions_list, workers->active_workers());
1302   workers->run_task(&cl);
1303 
1304   if (!empty_regions_list.is_empty()) {
1305     log_debug(gc)("Reclaimed %u empty regions", empty_regions_list.length());
1306     // Now print the empty regions list.




1266     AbstractGangTask("G1 Cleanup"),
1267     _g1h(g1h),
1268     _cleanup_list(cleanup_list),
1269     _hrclaimer(n_workers) {
1270 
1271     HeapRegionRemSet::reset_for_cleanup_tasks();
1272   }
1273 
1274   void work(uint worker_id) {
1275     FreeRegionList local_cleanup_list("Local Cleanup List");
1276     HRRSCleanupTask hrrs_cleanup_task;
1277     G1ReclaimEmptyRegionsClosure cl(_g1h,
1278                                     &local_cleanup_list,
1279                                     &hrrs_cleanup_task);
1280     _g1h->heap_region_par_iterate_from_worker_offset(&cl, &_hrclaimer, worker_id);
1281     assert(cl.is_complete(), "Shouldn't have aborted!");
1282 
1283     // Now update the old/humongous region sets
1284     _g1h->remove_from_old_sets(cl.old_regions_removed(), cl.humongous_regions_removed());
1285     {
1286       MutexLocker x(ParGCRareEvent_lock);
1287       _g1h->decrement_summary_bytes(cl.freed_bytes());
1288 
1289       _cleanup_list->add_ordered(&local_cleanup_list);
1290       assert(local_cleanup_list.is_empty(), "post-condition");
1291 
1292       HeapRegionRemSet::finish_cleanup_task(&hrrs_cleanup_task);
1293     }
1294   }
1295 };
1296 
1297 void G1ConcurrentMark::reclaim_empty_regions() {
1298   WorkGang* workers = _g1h->workers();
1299   FreeRegionList empty_regions_list("Empty Regions After Mark List");
1300 
1301   G1ReclaimEmptyRegionsTask cl(_g1h, &empty_regions_list, workers->active_workers());
1302   workers->run_task(&cl);
1303 
1304   if (!empty_regions_list.is_empty()) {
1305     log_debug(gc)("Reclaimed %u empty regions", empty_regions_list.length());
1306     // Now print the empty regions list.


< prev index next >