216
217 if (ZapUnusedHeapArea) {
218 // Do a complete mangle (top to end) because the usage for
219 // scratch does not maintain a top pointer.
220 young_gen->to_space()->mangle_unused_area_complete();
221 }
222
223 eden_empty = young_gen->eden_space()->is_empty();
224 if (!eden_empty) {
225 eden_empty = absorb_live_data_from_eden(size_policy, young_gen, old_gen);
226 }
227
228 // Update heap occupancy information which is used as
229 // input to soft ref clearing policy at the next gc.
230 Universe::update_heap_info_at_gc();
231
232 survivors_empty = young_gen->from_space()->is_empty() &&
233 young_gen->to_space()->is_empty();
234 young_gen_empty = eden_empty && survivors_empty;
235
236 ModRefBarrierSet* modBS = barrier_set_cast<ModRefBarrierSet>(heap->barrier_set());
237 MemRegion old_mr = heap->old_gen()->reserved();
238 if (young_gen_empty) {
239 modBS->clear(MemRegion(old_mr.start(), old_mr.end()));
240 } else {
241 modBS->invalidate(MemRegion(old_mr.start(), old_mr.end()));
242 }
243
244 // Delete metaspaces for unloaded class loaders and clean up loader_data graph
245 ClassLoaderDataGraph::purge();
246 MetaspaceAux::verify_metrics();
247
248 BiasedLocking::restore_marks();
249 CodeCache::gc_epilogue();
250 JvmtiExport::gc_epilogue();
251
252 #if defined(COMPILER2) || INCLUDE_JVMCI
253 DerivedPointerTable::update_pointers();
254 #endif
255
256 ref_processor()->enqueue_discovered_references(NULL);
257
258 // Update time of last GC
259 reset_millis_since_last_gc();
260
261 // Let the size policy know we're done
|
216
217 if (ZapUnusedHeapArea) {
218 // Do a complete mangle (top to end) because the usage for
219 // scratch does not maintain a top pointer.
220 young_gen->to_space()->mangle_unused_area_complete();
221 }
222
223 eden_empty = young_gen->eden_space()->is_empty();
224 if (!eden_empty) {
225 eden_empty = absorb_live_data_from_eden(size_policy, young_gen, old_gen);
226 }
227
228 // Update heap occupancy information which is used as
229 // input to soft ref clearing policy at the next gc.
230 Universe::update_heap_info_at_gc();
231
232 survivors_empty = young_gen->from_space()->is_empty() &&
233 young_gen->to_space()->is_empty();
234 young_gen_empty = eden_empty && survivors_empty;
235
236 PSCardTable* card_table = heap->card_table();
237 MemRegion old_mr = heap->old_gen()->reserved();
238 if (young_gen_empty) {
239 card_table->clear(MemRegion(old_mr.start(), old_mr.end()));
240 } else {
241 card_table->invalidate(MemRegion(old_mr.start(), old_mr.end()));
242 }
243
244 // Delete metaspaces for unloaded class loaders and clean up loader_data graph
245 ClassLoaderDataGraph::purge();
246 MetaspaceAux::verify_metrics();
247
248 BiasedLocking::restore_marks();
249 CodeCache::gc_epilogue();
250 JvmtiExport::gc_epilogue();
251
252 #if defined(COMPILER2) || INCLUDE_JVMCI
253 DerivedPointerTable::update_pointers();
254 #endif
255
256 ref_processor()->enqueue_discovered_references(NULL);
257
258 // Update time of last GC
259 reset_millis_since_last_gc();
260
261 // Let the size policy know we're done
|