< prev index next >

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

Print this page




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) {


< prev index next >