170 VeryLargeInWords = VeryLargeInBytes/HeapWordSize, |
170 VeryLargeInWords = VeryLargeInBytes/HeapWordSize, |
171 MinHeapDeltaBytes = 10 * HeapRegion::GrainBytes, // FIXME |
171 MinHeapDeltaBytes = 10 * HeapRegion::GrainBytes, // FIXME |
172 NumAPIs = HeapRegion::MaxAge |
172 NumAPIs = HeapRegion::MaxAge |
173 }; |
173 }; |
174 |
174 |
175 |
|
176 // The one and only G1CollectedHeap, so static functions can find it. |
175 // The one and only G1CollectedHeap, so static functions can find it. |
177 static G1CollectedHeap* _g1h; |
176 static G1CollectedHeap* _g1h; |
178 |
177 |
179 // Storage for the G1 heap (excludes the permanent generation). |
178 // Storage for the G1 heap (excludes the permanent generation). |
180 VirtualSpace _g1_storage; |
179 VirtualSpace _g1_storage; |
215 // allocated. May be NULL. |
214 // allocated. May be NULL. |
216 HeapRegion* _cur_alloc_region; |
215 HeapRegion* _cur_alloc_region; |
217 |
216 |
218 // Postcondition: cur_alloc_region == NULL. |
217 // Postcondition: cur_alloc_region == NULL. |
219 void abandon_cur_alloc_region(); |
218 void abandon_cur_alloc_region(); |
|
219 void abandon_gc_alloc_regions(); |
220 |
220 |
221 // The to-space memory regions into which objects are being copied during |
221 // The to-space memory regions into which objects are being copied during |
222 // a GC. |
222 // a GC. |
223 HeapRegion* _gc_alloc_regions[GCAllocPurposeCount]; |
223 HeapRegion* _gc_alloc_regions[GCAllocPurposeCount]; |
224 size_t _gc_alloc_region_counts[GCAllocPurposeCount]; |
224 size_t _gc_alloc_region_counts[GCAllocPurposeCount]; |
|
225 // These are the regions, one per GCAllocPurpose, that are half-full |
|
226 // at the end of a collection and that we want to reuse during the |
|
227 // next collection. |
|
228 HeapRegion* _retained_gc_alloc_regions[GCAllocPurposeCount]; |
|
229 // This specifies whether we will keep the last half-full region at |
|
230 // the end of a collection so that it can be reused during the next |
|
231 // collection (this is specified per GCAllocPurpose) |
|
232 bool _retain_gc_alloc_region[GCAllocPurposeCount]; |
225 |
233 |
226 // A list of the regions that have been set to be alloc regions in the |
234 // A list of the regions that have been set to be alloc regions in the |
227 // current collection. |
235 // current collection. |
228 HeapRegion* _gc_alloc_region_list; |
236 HeapRegion* _gc_alloc_region_list; |
229 |
237 |
587 void handle_evacuation_failure_common(oop obj, markOop m); |
595 void handle_evacuation_failure_common(oop obj, markOop m); |
588 |
596 |
589 |
597 |
590 // Ensure that the relevant gc_alloc regions are set. |
598 // Ensure that the relevant gc_alloc regions are set. |
591 void get_gc_alloc_regions(); |
599 void get_gc_alloc_regions(); |
592 // We're done with GC alloc regions; release them, as appropriate. |
600 // We're done with GC alloc regions. We are going to tear down the |
593 void release_gc_alloc_regions(); |
601 // gc alloc list and remove the gc alloc tag from all the regions on |
|
602 // that list. However, we will also retain the last (i.e., the one |
|
603 // that is half-full) GC alloc region, per GCAllocPurpose, for |
|
604 // possible reuse during the next collection, provided |
|
605 // _retain_gc_alloc_region[] indicates that it should be the |
|
606 // case. Said regions are kept in the _retained_gc_alloc_regions[] |
|
607 // array. If the parameter totally is set, we will not retain any |
|
608 // regions, irrespective of what _retain_gc_alloc_region[] |
|
609 // indicates. |
|
610 void release_gc_alloc_regions(bool totally); |
|
611 #ifndef PRODUCT |
|
612 // Useful for debugging. |
|
613 void print_gc_alloc_regions(); |
|
614 #endif // !PRODUCT |
594 |
615 |
595 // ("Weak") Reference processing support |
616 // ("Weak") Reference processing support |
596 ReferenceProcessor* _ref_processor; |
617 ReferenceProcessor* _ref_processor; |
597 |
618 |
598 enum G1H_process_strong_roots_tasks { |
619 enum G1H_process_strong_roots_tasks { |