96 PSPermGen* perm_gen = heap->perm_gen(); |
96 PSPermGen* perm_gen = heap->perm_gen(); |
97 |
97 |
98 // Increment the invocation count |
98 // Increment the invocation count |
99 heap->increment_total_collections(true /* full */); |
99 heap->increment_total_collections(true /* full */); |
100 |
100 |
|
101 // Save information needed to minimize mangling |
|
102 heap->record_gen_tops_before_GC(); |
|
103 |
101 // We need to track unique mark sweep invocations as well. |
104 // We need to track unique mark sweep invocations as well. |
102 _total_invocations++; |
105 _total_invocations++; |
103 |
106 |
104 AdaptiveSizePolicyOutput(size_policy, heap->total_collections()); |
107 AdaptiveSizePolicyOutput(size_policy, heap->total_collections()); |
105 |
108 |
186 |
189 |
187 restore_marks(); |
190 restore_marks(); |
188 |
191 |
189 deallocate_stacks(); |
192 deallocate_stacks(); |
190 |
193 |
|
194 if (ZapUnusedHeapArea) { |
|
195 // Do a complete mangle (top to end) because the usage for |
|
196 // scratch does not maintain a top pointer. |
|
197 young_gen->to_space()->mangle_unused_area_complete(); |
|
198 } |
|
199 |
191 eden_empty = young_gen->eden_space()->is_empty(); |
200 eden_empty = young_gen->eden_space()->is_empty(); |
192 if (!eden_empty) { |
201 if (!eden_empty) { |
193 eden_empty = absorb_live_data_from_eden(size_policy, young_gen, old_gen); |
202 eden_empty = absorb_live_data_from_eden(size_policy, young_gen, old_gen); |
194 } |
203 } |
195 |
204 |
196 // Update heap occupancy information which is used as |
205 // Update heap occupancy information which is used as |
197 // input to soft ref clearing policy at the next gc. |
206 // input to soft ref clearing policy at the next gc. |
198 Universe::update_heap_info_at_gc(); |
207 Universe::update_heap_info_at_gc(); |
199 |
208 |
200 survivors_empty = young_gen->from_space()->is_empty() && |
209 survivors_empty = young_gen->from_space()->is_empty() && |
201 young_gen->to_space()->is_empty(); |
210 young_gen->to_space()->is_empty(); |
202 young_gen_empty = eden_empty && survivors_empty; |
211 young_gen_empty = eden_empty && survivors_empty; |
203 |
212 |
204 BarrierSet* bs = heap->barrier_set(); |
213 BarrierSet* bs = heap->barrier_set(); |
205 if (bs->is_a(BarrierSet::ModRef)) { |
214 if (bs->is_a(BarrierSet::ModRef)) { |
206 ModRefBarrierSet* modBS = (ModRefBarrierSet*)bs; |
215 ModRefBarrierSet* modBS = (ModRefBarrierSet*)bs; |
342 VerifyAfterGC) { |
351 VerifyAfterGC) { |
343 old_gen->verify_object_start_array(); |
352 old_gen->verify_object_start_array(); |
344 perm_gen->verify_object_start_array(); |
353 perm_gen->verify_object_start_array(); |
345 } |
354 } |
346 |
355 |
|
356 if (ZapUnusedHeapArea) { |
|
357 old_gen->object_space()->check_mangled_unused_area_complete(); |
|
358 perm_gen->object_space()->check_mangled_unused_area_complete(); |
|
359 } |
|
360 |
347 NOT_PRODUCT(ref_processor()->verify_no_references_recorded()); |
361 NOT_PRODUCT(ref_processor()->verify_no_references_recorded()); |
348 |
362 |
349 if (PrintHeapAtGC) { |
363 if (PrintHeapAtGC) { |
350 Universe::print_heap_after_gc(); |
364 Universe::print_heap_after_gc(); |
351 } |
365 } |