Mercurial > hg > graal-compiler
comparison src/share/vm/gc_implementation/g1/g1MarkSweep.cpp @ 2153:377371490991
Merge
author | johnc |
---|---|
date | Thu, 20 Jan 2011 13:57:12 -0800 |
parents | 9afee0b9fc1d 0fa27f37d4d4 |
children | 3582bf76420e |
comparison
equal
deleted
inserted
replaced
2148:02b6913287da | 2153:377371490991 |
---|---|
1 /* | 1 /* |
2 * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved. | 2 * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * | 4 * |
5 * This code is free software; you can redistribute it and/or modify it | 5 * This code is free software; you can redistribute it and/or modify it |
6 * under the terms of the GNU General Public License version 2 only, as | 6 * under the terms of the GNU General Public License version 2 only, as |
7 * published by the Free Software Foundation. | 7 * published by the Free Software Foundation. |
179 assert(GenMarkSweep::_marking_stack.is_empty(), | 179 assert(GenMarkSweep::_marking_stack.is_empty(), |
180 "stack should be empty by now"); | 180 "stack should be empty by now"); |
181 } | 181 } |
182 | 182 |
183 class G1PrepareCompactClosure: public HeapRegionClosure { | 183 class G1PrepareCompactClosure: public HeapRegionClosure { |
184 G1CollectedHeap* _g1h; | |
184 ModRefBarrierSet* _mrbs; | 185 ModRefBarrierSet* _mrbs; |
185 CompactPoint _cp; | 186 CompactPoint _cp; |
187 size_t _pre_used; | |
188 FreeRegionList _free_list; | |
189 HumongousRegionSet _humongous_proxy_set; | |
186 | 190 |
187 void free_humongous_region(HeapRegion* hr) { | 191 void free_humongous_region(HeapRegion* hr) { |
188 HeapWord* bot = hr->bottom(); | |
189 HeapWord* end = hr->end(); | 192 HeapWord* end = hr->end(); |
190 assert(hr->startsHumongous(), | 193 assert(hr->startsHumongous(), |
191 "Only the start of a humongous region should be freed."); | 194 "Only the start of a humongous region should be freed."); |
192 G1CollectedHeap::heap()->free_region(hr); | 195 _g1h->free_humongous_region(hr, &_pre_used, &_free_list, |
196 &_humongous_proxy_set, false /* par */); | |
197 // Do we also need to do this for the continues humongous regions | |
198 // we just collapsed? | |
193 hr->prepare_for_compaction(&_cp); | 199 hr->prepare_for_compaction(&_cp); |
194 // Also clear the part of the card table that will be unused after | 200 // Also clear the part of the card table that will be unused after |
195 // compaction. | 201 // compaction. |
196 _mrbs->clear(MemRegion(hr->compaction_top(), hr->end())); | 202 _mrbs->clear(MemRegion(hr->compaction_top(), end)); |
197 } | 203 } |
198 | 204 |
199 public: | 205 public: |
200 G1PrepareCompactClosure(CompactibleSpace* cs) : | 206 G1PrepareCompactClosure(CompactibleSpace* cs) |
207 : _g1h(G1CollectedHeap::heap()), | |
208 _mrbs(G1CollectedHeap::heap()->mr_bs()), | |
201 _cp(NULL, cs, cs->initialize_threshold()), | 209 _cp(NULL, cs, cs->initialize_threshold()), |
202 _mrbs(G1CollectedHeap::heap()->mr_bs()) | 210 _pre_used(0), |
203 {} | 211 _free_list("Local Free List for G1MarkSweep"), |
212 _humongous_proxy_set("G1MarkSweep Humongous Proxy Set") { } | |
213 | |
214 void update_sets() { | |
215 // We'll recalculate total used bytes and recreate the free list | |
216 // at the end of the GC, so no point in updating those values here. | |
217 _g1h->update_sets_after_freeing_regions(0, /* pre_used */ | |
218 NULL, /* free_list */ | |
219 &_humongous_proxy_set, | |
220 false /* par */); | |
221 _free_list.remove_all(); | |
222 } | |
223 | |
204 bool doHeapRegion(HeapRegion* hr) { | 224 bool doHeapRegion(HeapRegion* hr) { |
205 if (hr->isHumongous()) { | 225 if (hr->isHumongous()) { |
206 if (hr->startsHumongous()) { | 226 if (hr->startsHumongous()) { |
207 oop obj = oop(hr->bottom()); | 227 oop obj = oop(hr->bottom()); |
208 if (obj->is_gc_marked()) { | 228 if (obj->is_gc_marked()) { |
264 sp = r->next_compaction_space(); | 284 sp = r->next_compaction_space(); |
265 } | 285 } |
266 | 286 |
267 G1PrepareCompactClosure blk(sp); | 287 G1PrepareCompactClosure blk(sp); |
268 g1h->heap_region_iterate(&blk); | 288 g1h->heap_region_iterate(&blk); |
289 blk.update_sets(); | |
269 | 290 |
270 CompactPoint perm_cp(pg, NULL, NULL); | 291 CompactPoint perm_cp(pg, NULL, NULL); |
271 pg->prepare_for_compaction(&perm_cp); | 292 pg->prepare_for_compaction(&perm_cp); |
272 } | 293 } |
273 | 294 |