1000 }
1001
1002 MutableSpace* const eden_space = _space_info[eden_space_id].space();
1003 MutableSpace* const from_space = _space_info[from_space_id].space();
1004 MutableSpace* const to_space = _space_info[to_space_id].space();
1005
1006 ParallelScavengeHeap* heap = ParallelScavengeHeap::heap();
1007 bool eden_empty = eden_space->is_empty();
1008 if (!eden_empty) {
1009 eden_empty = absorb_live_data_from_eden(heap->size_policy(),
1010 heap->young_gen(), heap->old_gen());
1011 }
1012
1013 // Update heap occupancy information which is used as input to the soft ref
1014 // clearing policy at the next gc.
1015 Universe::update_heap_info_at_gc();
1016
1017 bool young_gen_empty = eden_empty && from_space->is_empty() &&
1018 to_space->is_empty();
1019
1020 ModRefBarrierSet* modBS = barrier_set_cast<ModRefBarrierSet>(heap->barrier_set());
1021 MemRegion old_mr = heap->old_gen()->reserved();
1022 if (young_gen_empty) {
1023 modBS->clear(MemRegion(old_mr.start(), old_mr.end()));
1024 } else {
1025 modBS->invalidate(MemRegion(old_mr.start(), old_mr.end()));
1026 }
1027
1028 // Delete metaspaces for unloaded class loaders and clean up loader_data graph
1029 ClassLoaderDataGraph::purge();
1030 MetaspaceAux::verify_metrics();
1031
1032 CodeCache::gc_epilogue();
1033 JvmtiExport::gc_epilogue();
1034
1035 #if defined(COMPILER2) || INCLUDE_JVMCI
1036 DerivedPointerTable::update_pointers();
1037 #endif
1038
1039 ref_processor()->enqueue_discovered_references(NULL);
1040
1041 if (ZapUnusedHeapArea) {
1042 heap->gen_mangle_unused_area();
1043 }
1044
1045 // Update time of last GC
|
1000 }
1001
1002 MutableSpace* const eden_space = _space_info[eden_space_id].space();
1003 MutableSpace* const from_space = _space_info[from_space_id].space();
1004 MutableSpace* const to_space = _space_info[to_space_id].space();
1005
1006 ParallelScavengeHeap* heap = ParallelScavengeHeap::heap();
1007 bool eden_empty = eden_space->is_empty();
1008 if (!eden_empty) {
1009 eden_empty = absorb_live_data_from_eden(heap->size_policy(),
1010 heap->young_gen(), heap->old_gen());
1011 }
1012
1013 // Update heap occupancy information which is used as input to the soft ref
1014 // clearing policy at the next gc.
1015 Universe::update_heap_info_at_gc();
1016
1017 bool young_gen_empty = eden_empty && from_space->is_empty() &&
1018 to_space->is_empty();
1019
1020 PSCardTable* ct = heap->card_table();
1021 MemRegion old_mr = heap->old_gen()->reserved();
1022 if (young_gen_empty) {
1023 ct->clear(MemRegion(old_mr.start(), old_mr.end()));
1024 } else {
1025 ct->invalidate(MemRegion(old_mr.start(), old_mr.end()));
1026 }
1027
1028 // Delete metaspaces for unloaded class loaders and clean up loader_data graph
1029 ClassLoaderDataGraph::purge();
1030 MetaspaceAux::verify_metrics();
1031
1032 CodeCache::gc_epilogue();
1033 JvmtiExport::gc_epilogue();
1034
1035 #if defined(COMPILER2) || INCLUDE_JVMCI
1036 DerivedPointerTable::update_pointers();
1037 #endif
1038
1039 ref_processor()->enqueue_discovered_references(NULL);
1040
1041 if (ZapUnusedHeapArea) {
1042 heap->gen_mangle_unused_area();
1043 }
1044
1045 // Update time of last GC
|