37 #include "gc/parallel/psAdaptiveSizePolicy.hpp" 38 #include "gc/parallel/psCompactionManager.inline.hpp" 39 #include "gc/parallel/psOldGen.hpp" 40 #include "gc/parallel/psParallelCompact.inline.hpp" 41 #include "gc/parallel/psPromotionManager.inline.hpp" 42 #include "gc/parallel/psScavenge.hpp" 43 #include "gc/parallel/psYoungGen.hpp" 44 #include "gc/shared/gcCause.hpp" 45 #include "gc/shared/gcHeapSummary.hpp" 46 #include "gc/shared/gcId.hpp" 47 #include "gc/shared/gcLocker.hpp" 48 #include "gc/shared/gcTimer.hpp" 49 #include "gc/shared/gcTrace.hpp" 50 #include "gc/shared/gcTraceTime.inline.hpp" 51 #include "gc/shared/isGCActiveMark.hpp" 52 #include "gc/shared/referencePolicy.hpp" 53 #include "gc/shared/referenceProcessor.hpp" 54 #include "gc/shared/referenceProcessorPhaseTimes.hpp" 55 #include "gc/shared/spaceDecorator.hpp" 56 #include "gc/shared/weakProcessor.hpp" 57 #include "logging/log.hpp" 58 #include "memory/iterator.inline.hpp" 59 #include "memory/resourceArea.hpp" 60 #include "oops/access.inline.hpp" 61 #include "oops/instanceClassLoaderKlass.inline.hpp" 62 #include "oops/instanceKlass.inline.hpp" 63 #include "oops/instanceMirrorKlass.inline.hpp" 64 #include "oops/methodData.hpp" 65 #include "oops/objArrayKlass.inline.hpp" 66 #include "oops/oop.inline.hpp" 67 #include "runtime/atomic.hpp" 68 #include "runtime/handles.inline.hpp" 69 #include "runtime/safepoint.hpp" 70 #include "runtime/vmThread.hpp" 71 #include "services/management.hpp" 72 #include "services/memTracker.hpp" 73 #include "services/memoryService.hpp" 74 #include "utilities/align.hpp" 75 #include "utilities/debug.hpp" 76 #include "utilities/events.hpp" 2159 2160 // This is the point where the entire marking should have completed. 2161 assert(cm->marking_stacks_empty(), "Marking should have completed"); 2162 2163 { 2164 GCTraceTime(Debug, gc, phases) tm("Weak Processing", &_gc_timer); 2165 WeakProcessor::weak_oops_do(is_alive_closure(), &do_nothing_cl); 2166 } 2167 2168 { 2169 GCTraceTime(Debug, gc, phases) tm_m("Class Unloading", &_gc_timer); 2170 2171 // Follow system dictionary roots and unload classes. 2172 bool purged_class = SystemDictionary::do_unloading(&_gc_timer); 2173 2174 // Unload nmethods. 2175 CodeCache::do_unloading(is_alive_closure(), purged_class); 2176 2177 // Prune dead klasses from subklass/sibling/implementor lists. 2178 Klass::clean_weak_klass_links(purged_class); 2179 } 2180 2181 _gc_tracer.report_object_count_after_gc(is_alive_closure()); 2182 } 2183 2184 void PSParallelCompact::adjust_roots(ParCompactionManager* cm) { 2185 // Adjust the pointers to reflect the new locations 2186 GCTraceTime(Info, gc, phases) tm("Adjust Roots", &_gc_timer); 2187 2188 // Need new claim bits when tracing through and adjusting pointers. 2189 ClassLoaderDataGraph::clear_claimed_marks(); 2190 2191 PCAdjustPointerClosure oop_closure(cm); 2192 2193 // General strong roots. 2194 Universe::oops_do(&oop_closure); 2195 JNIHandles::oops_do(&oop_closure); // Global (strong) JNI handles 2196 Threads::oops_do(&oop_closure, NULL); 2197 ObjectSynchronizer::oops_do(&oop_closure); 2198 Management::oops_do(&oop_closure); | 37 #include "gc/parallel/psAdaptiveSizePolicy.hpp" 38 #include "gc/parallel/psCompactionManager.inline.hpp" 39 #include "gc/parallel/psOldGen.hpp" 40 #include "gc/parallel/psParallelCompact.inline.hpp" 41 #include "gc/parallel/psPromotionManager.inline.hpp" 42 #include "gc/parallel/psScavenge.hpp" 43 #include "gc/parallel/psYoungGen.hpp" 44 #include "gc/shared/gcCause.hpp" 45 #include "gc/shared/gcHeapSummary.hpp" 46 #include "gc/shared/gcId.hpp" 47 #include "gc/shared/gcLocker.hpp" 48 #include "gc/shared/gcTimer.hpp" 49 #include "gc/shared/gcTrace.hpp" 50 #include "gc/shared/gcTraceTime.inline.hpp" 51 #include "gc/shared/isGCActiveMark.hpp" 52 #include "gc/shared/referencePolicy.hpp" 53 #include "gc/shared/referenceProcessor.hpp" 54 #include "gc/shared/referenceProcessorPhaseTimes.hpp" 55 #include "gc/shared/spaceDecorator.hpp" 56 #include "gc/shared/weakProcessor.hpp" 57 #if INCLUDE_JVMCI 58 #include "jvmci/jvmci.hpp" 59 #endif 60 #include "logging/log.hpp" 61 #include "memory/iterator.inline.hpp" 62 #include "memory/resourceArea.hpp" 63 #include "oops/access.inline.hpp" 64 #include "oops/instanceClassLoaderKlass.inline.hpp" 65 #include "oops/instanceKlass.inline.hpp" 66 #include "oops/instanceMirrorKlass.inline.hpp" 67 #include "oops/methodData.hpp" 68 #include "oops/objArrayKlass.inline.hpp" 69 #include "oops/oop.inline.hpp" 70 #include "runtime/atomic.hpp" 71 #include "runtime/handles.inline.hpp" 72 #include "runtime/safepoint.hpp" 73 #include "runtime/vmThread.hpp" 74 #include "services/management.hpp" 75 #include "services/memTracker.hpp" 76 #include "services/memoryService.hpp" 77 #include "utilities/align.hpp" 78 #include "utilities/debug.hpp" 79 #include "utilities/events.hpp" 2162 2163 // This is the point where the entire marking should have completed. 2164 assert(cm->marking_stacks_empty(), "Marking should have completed"); 2165 2166 { 2167 GCTraceTime(Debug, gc, phases) tm("Weak Processing", &_gc_timer); 2168 WeakProcessor::weak_oops_do(is_alive_closure(), &do_nothing_cl); 2169 } 2170 2171 { 2172 GCTraceTime(Debug, gc, phases) tm_m("Class Unloading", &_gc_timer); 2173 2174 // Follow system dictionary roots and unload classes. 2175 bool purged_class = SystemDictionary::do_unloading(&_gc_timer); 2176 2177 // Unload nmethods. 2178 CodeCache::do_unloading(is_alive_closure(), purged_class); 2179 2180 // Prune dead klasses from subklass/sibling/implementor lists. 2181 Klass::clean_weak_klass_links(purged_class); 2182 2183 #if INCLUDE_JVMCI 2184 // Clean JVMCI metadata handles. 2185 JVMCI::do_unloading(is_alive_closure(), purged_class); 2186 #endif 2187 } 2188 2189 _gc_tracer.report_object_count_after_gc(is_alive_closure()); 2190 } 2191 2192 void PSParallelCompact::adjust_roots(ParCompactionManager* cm) { 2193 // Adjust the pointers to reflect the new locations 2194 GCTraceTime(Info, gc, phases) tm("Adjust Roots", &_gc_timer); 2195 2196 // Need new claim bits when tracing through and adjusting pointers. 2197 ClassLoaderDataGraph::clear_claimed_marks(); 2198 2199 PCAdjustPointerClosure oop_closure(cm); 2200 2201 // General strong roots. 2202 Universe::oops_do(&oop_closure); 2203 JNIHandles::oops_do(&oop_closure); // Global (strong) JNI handles 2204 Threads::oops_do(&oop_closure, NULL); 2205 ObjectSynchronizer::oops_do(&oop_closure); 2206 Management::oops_do(&oop_closure); |