1127
1128 public:
1129 G1NoteEndOfConcMarkClosure(G1CollectedHeap* g1,
1130 FreeRegionList* local_cleanup_list,
1131 HRRSCleanupTask* hrrs_cleanup_task) :
1132 _g1(g1),
1133 _freed_bytes(0),
1134 _local_cleanup_list(local_cleanup_list),
1135 _old_regions_removed(0),
1136 _humongous_regions_removed(0),
1137 _hrrs_cleanup_task(hrrs_cleanup_task) { }
1138
1139 size_t freed_bytes() { return _freed_bytes; }
1140 const uint old_regions_removed() { return _old_regions_removed; }
1141 const uint humongous_regions_removed() { return _humongous_regions_removed; }
1142
1143 bool doHeapRegion(HeapRegion *hr) {
1144 if (hr->is_archive()) {
1145 return false;
1146 }
1147 // We use a claim value of zero here because all regions
1148 // were claimed with value 1 in the FinalCount task.
1149 _g1->reset_gc_time_stamps(hr);
1150 hr->note_end_of_marking();
1151
1152 if (hr->used() > 0 && hr->max_live_bytes() == 0 && !hr->is_young()) {
1153 _freed_bytes += hr->used();
1154 hr->set_containing_set(NULL);
1155 if (hr->is_humongous()) {
1156 _humongous_regions_removed++;
1157 _g1->free_humongous_region(hr, _local_cleanup_list, true);
1158 } else {
1159 _old_regions_removed++;
1160 _g1->free_region(hr, _local_cleanup_list, true);
1161 }
1162 } else {
1163 hr->rem_set()->do_cleanup_work(_hrrs_cleanup_task);
1164 }
1165
1166 return false;
1167 }
1168 };
|
1127
1128 public:
1129 G1NoteEndOfConcMarkClosure(G1CollectedHeap* g1,
1130 FreeRegionList* local_cleanup_list,
1131 HRRSCleanupTask* hrrs_cleanup_task) :
1132 _g1(g1),
1133 _freed_bytes(0),
1134 _local_cleanup_list(local_cleanup_list),
1135 _old_regions_removed(0),
1136 _humongous_regions_removed(0),
1137 _hrrs_cleanup_task(hrrs_cleanup_task) { }
1138
1139 size_t freed_bytes() { return _freed_bytes; }
1140 const uint old_regions_removed() { return _old_regions_removed; }
1141 const uint humongous_regions_removed() { return _humongous_regions_removed; }
1142
1143 bool doHeapRegion(HeapRegion *hr) {
1144 if (hr->is_archive()) {
1145 return false;
1146 }
1147 _g1->reset_gc_time_stamps(hr);
1148 hr->note_end_of_marking();
1149
1150 if (hr->used() > 0 && hr->max_live_bytes() == 0 && !hr->is_young()) {
1151 _freed_bytes += hr->used();
1152 hr->set_containing_set(NULL);
1153 if (hr->is_humongous()) {
1154 _humongous_regions_removed++;
1155 _g1->free_humongous_region(hr, _local_cleanup_list, true);
1156 } else {
1157 _old_regions_removed++;
1158 _g1->free_region(hr, _local_cleanup_list, true);
1159 }
1160 } else {
1161 hr->rem_set()->do_cleanup_work(_hrrs_cleanup_task);
1162 }
1163
1164 return false;
1165 }
1166 };
|