1143 _old_regions_removed(0), 1144 _humongous_regions_removed(0), 1145 _hrrs_cleanup_task(hrrs_cleanup_task) { } 1146 1147 size_t freed_bytes() { return _freed_bytes; } 1148 const uint old_regions_removed() { return _old_regions_removed; } 1149 const uint humongous_regions_removed() { return _humongous_regions_removed; } 1150 1151 bool doHeapRegion(HeapRegion *hr) { 1152 if (hr->is_archive()) { 1153 return false; 1154 } 1155 _g1->reset_gc_time_stamps(hr); 1156 hr->note_end_of_marking(); 1157 1158 if (hr->used() > 0 && hr->max_live_bytes() == 0 && !hr->is_young()) { 1159 _freed_bytes += hr->used(); 1160 hr->set_containing_set(NULL); 1161 if (hr->is_humongous()) { 1162 _humongous_regions_removed++; 1163 _g1->free_humongous_region(hr, _local_cleanup_list, true); 1164 } else { 1165 _old_regions_removed++; 1166 _g1->free_region(hr, _local_cleanup_list, true); 1167 } 1168 } else { 1169 hr->rem_set()->do_cleanup_work(_hrrs_cleanup_task); 1170 } 1171 1172 return false; 1173 } 1174 }; 1175 1176 class G1ParNoteEndTask: public AbstractGangTask { 1177 friend class G1NoteEndOfConcMarkClosure; 1178 1179 protected: 1180 G1CollectedHeap* _g1h; 1181 FreeRegionList* _cleanup_list; 1182 HeapRegionClaimer _hrclaimer; 1183 1184 public: 1185 G1ParNoteEndTask(G1CollectedHeap* g1h, FreeRegionList* cleanup_list, uint n_workers) : 1186 AbstractGangTask("G1 note end"), _g1h(g1h), _cleanup_list(cleanup_list), _hrclaimer(n_workers) { | 1143 _old_regions_removed(0), 1144 _humongous_regions_removed(0), 1145 _hrrs_cleanup_task(hrrs_cleanup_task) { } 1146 1147 size_t freed_bytes() { return _freed_bytes; } 1148 const uint old_regions_removed() { return _old_regions_removed; } 1149 const uint humongous_regions_removed() { return _humongous_regions_removed; } 1150 1151 bool doHeapRegion(HeapRegion *hr) { 1152 if (hr->is_archive()) { 1153 return false; 1154 } 1155 _g1->reset_gc_time_stamps(hr); 1156 hr->note_end_of_marking(); 1157 1158 if (hr->used() > 0 && hr->max_live_bytes() == 0 && !hr->is_young()) { 1159 _freed_bytes += hr->used(); 1160 hr->set_containing_set(NULL); 1161 if (hr->is_humongous()) { 1162 _humongous_regions_removed++; 1163 _g1->free_humongous_region(hr, _local_cleanup_list, true /* skip_remset */); 1164 } else { 1165 _old_regions_removed++; 1166 _g1->free_region(hr, _local_cleanup_list, true /* skip_remset */); 1167 } 1168 } else { 1169 hr->rem_set()->do_cleanup_work(_hrrs_cleanup_task); 1170 } 1171 1172 return false; 1173 } 1174 }; 1175 1176 class G1ParNoteEndTask: public AbstractGangTask { 1177 friend class G1NoteEndOfConcMarkClosure; 1178 1179 protected: 1180 G1CollectedHeap* _g1h; 1181 FreeRegionList* _cleanup_list; 1182 HeapRegionClaimer _hrclaimer; 1183 1184 public: 1185 G1ParNoteEndTask(G1CollectedHeap* g1h, FreeRegionList* cleanup_list, uint n_workers) : 1186 AbstractGangTask("G1 note end"), _g1h(g1h), _cleanup_list(cleanup_list), _hrclaimer(n_workers) { |