1175 uint _old_regions_removed;
1176 uint _humongous_regions_removed;
1177 HRRSCleanupTask* _hrrs_cleanup_task;
1178
1179 public:
1180 G1NoteEndOfConcMarkClosure(G1CollectedHeap* g1,
1181 FreeRegionList* local_cleanup_list,
1182 HRRSCleanupTask* hrrs_cleanup_task) :
1183 _g1(g1),
1184 _freed_bytes(0),
1185 _local_cleanup_list(local_cleanup_list),
1186 _old_regions_removed(0),
1187 _humongous_regions_removed(0),
1188 _hrrs_cleanup_task(hrrs_cleanup_task) { }
1189
1190 size_t freed_bytes() { return _freed_bytes; }
1191 const uint old_regions_removed() { return _old_regions_removed; }
1192 const uint humongous_regions_removed() { return _humongous_regions_removed; }
1193
1194 bool doHeapRegion(HeapRegion *hr) {
1195 if (hr->is_archive()) {
1196 return false;
1197 }
1198 _g1->reset_gc_time_stamps(hr);
1199 hr->note_end_of_marking();
1200
1201 if (hr->used() > 0 && hr->max_live_bytes() == 0 && !hr->is_young()) {
1202 _freed_bytes += hr->used();
1203 hr->set_containing_set(NULL);
1204 if (hr->is_humongous()) {
1205 _humongous_regions_removed++;
1206 _g1->free_humongous_region(hr, _local_cleanup_list, true /* skip_remset */);
1207 } else {
1208 _old_regions_removed++;
1209 _g1->free_region(hr, _local_cleanup_list, true /* skip_remset */);
1210 }
1211 } else {
1212 hr->rem_set()->do_cleanup_work(_hrrs_cleanup_task);
1213 }
1214
1215 return false;
1216 }
1217 };
1218
1219 class G1ParNoteEndTask: public AbstractGangTask {
1220 friend class G1NoteEndOfConcMarkClosure;
1221
|
1175 uint _old_regions_removed;
1176 uint _humongous_regions_removed;
1177 HRRSCleanupTask* _hrrs_cleanup_task;
1178
1179 public:
1180 G1NoteEndOfConcMarkClosure(G1CollectedHeap* g1,
1181 FreeRegionList* local_cleanup_list,
1182 HRRSCleanupTask* hrrs_cleanup_task) :
1183 _g1(g1),
1184 _freed_bytes(0),
1185 _local_cleanup_list(local_cleanup_list),
1186 _old_regions_removed(0),
1187 _humongous_regions_removed(0),
1188 _hrrs_cleanup_task(hrrs_cleanup_task) { }
1189
1190 size_t freed_bytes() { return _freed_bytes; }
1191 const uint old_regions_removed() { return _old_regions_removed; }
1192 const uint humongous_regions_removed() { return _humongous_regions_removed; }
1193
1194 bool doHeapRegion(HeapRegion *hr) {
1195 _g1->reset_gc_time_stamps(hr);
1196 hr->note_end_of_marking();
1197
1198 if (hr->used() > 0 && hr->max_live_bytes() == 0 && !hr->is_young() && !hr->is_archive()) {
1199 _freed_bytes += hr->used();
1200 hr->set_containing_set(NULL);
1201 if (hr->is_humongous()) {
1202 _humongous_regions_removed++;
1203 _g1->free_humongous_region(hr, _local_cleanup_list, true /* skip_remset */);
1204 } else {
1205 _old_regions_removed++;
1206 _g1->free_region(hr, _local_cleanup_list, true /* skip_remset */);
1207 }
1208 } else {
1209 hr->rem_set()->do_cleanup_work(_hrrs_cleanup_task);
1210 }
1211
1212 return false;
1213 }
1214 };
1215
1216 class G1ParNoteEndTask: public AbstractGangTask {
1217 friend class G1NoteEndOfConcMarkClosure;
1218
|