175 public:
176 FreeRegionList(const char* name, HRSMtSafeChecker* mt_safety_checker = NULL):
177 HeapRegionSetBase(name, false /* humongous */, true /* empty */, mt_safety_checker) {
178 clear();
179 }
180
181 void verify_list();
182
183 #ifdef ASSERT
184 bool contains(HeapRegion* hr) const {
185 return hr->containing_set() == this;
186 }
187 #endif
188
189 static void set_unrealistically_long_length(uint len);
190
191 // Add hr to the list. The region should not be a member of another set.
192 // Assumes that the list is ordered and will preserve that order. The order
193 // is determined by hrm_index.
194 inline void add_ordered(HeapRegion* hr);
195
196 // Removes from head or tail based on the given argument.
197 HeapRegion* remove_region(bool from_head);
198
199 // Merge two ordered lists. The result is also ordered. The order is
200 // determined by hrm_index.
201 void add_ordered(FreeRegionList* from_list);
202
203 // It empties the list by removing all regions from it.
204 void remove_all();
205
206 // Remove all (contiguous) regions from first to first + num_regions -1 from
207 // this list.
208 // Num_regions must be > 1.
209 void remove_starting_at(HeapRegion* first, uint num_regions);
210
211 virtual void verify();
212 };
213
214 // Iterator class that provides a convenient way to iterate over the
215 // regions of a FreeRegionList.
|
175 public:
176 FreeRegionList(const char* name, HRSMtSafeChecker* mt_safety_checker = NULL):
177 HeapRegionSetBase(name, false /* humongous */, true /* empty */, mt_safety_checker) {
178 clear();
179 }
180
181 void verify_list();
182
183 #ifdef ASSERT
184 bool contains(HeapRegion* hr) const {
185 return hr->containing_set() == this;
186 }
187 #endif
188
189 static void set_unrealistically_long_length(uint len);
190
191 // Add hr to the list. The region should not be a member of another set.
192 // Assumes that the list is ordered and will preserve that order. The order
193 // is determined by hrm_index.
194 inline void add_ordered(HeapRegion* hr);
195 inline HeapRegion* show_tail() { return _tail; }
196 // Removes from head or tail based on the given argument.
197 HeapRegion* remove_region(bool from_head);
198
199 // Merge two ordered lists. The result is also ordered. The order is
200 // determined by hrm_index.
201 void add_ordered(FreeRegionList* from_list);
202
203 // It empties the list by removing all regions from it.
204 void remove_all();
205
206 // Remove all (contiguous) regions from first to first + num_regions -1 from
207 // this list.
208 // Num_regions must be > 1.
209 void remove_starting_at(HeapRegion* first, uint num_regions);
210
211 virtual void verify();
212 };
213
214 // Iterator class that provides a convenient way to iterate over the
215 // regions of a FreeRegionList.
|