equal
deleted
inserted
replaced
191 // Let the size policy know we're starting |
191 // Let the size policy know we're starting |
192 size_policy->major_collection_begin(); |
192 size_policy->major_collection_begin(); |
193 |
193 |
194 BiasedLocking::preserve_marks(); |
194 BiasedLocking::preserve_marks(); |
195 |
195 |
196 // Capture metadata size before collection for sizing. |
196 const PreGenGCValues pre_gc_values = heap->get_pre_gc_values(); |
197 size_t metadata_prev_used = MetaspaceUtils::used_bytes(); |
|
198 |
|
199 size_t old_gen_prev_used = old_gen->used_in_bytes(); |
|
200 size_t young_gen_prev_used = young_gen->used_in_bytes(); |
|
201 |
197 |
202 allocate_stacks(); |
198 allocate_stacks(); |
203 |
199 |
204 #if COMPILER2_OR_JVMCI |
200 #if COMPILER2_OR_JVMCI |
205 DerivedPointerTable::clear(); |
201 DerivedPointerTable::clear(); |
257 ClassLoaderDataGraph::purge(); |
253 ClassLoaderDataGraph::purge(); |
258 MetaspaceUtils::verify_metrics(); |
254 MetaspaceUtils::verify_metrics(); |
259 |
255 |
260 BiasedLocking::restore_marks(); |
256 BiasedLocking::restore_marks(); |
261 heap->prune_scavengable_nmethods(); |
257 heap->prune_scavengable_nmethods(); |
262 JvmtiExport::gc_epilogue(); |
|
263 |
258 |
264 #if COMPILER2_OR_JVMCI |
259 #if COMPILER2_OR_JVMCI |
265 DerivedPointerTable::update_pointers(); |
260 DerivedPointerTable::update_pointers(); |
266 #endif |
261 #endif |
267 |
262 |
351 |
346 |
352 if (log_is_enabled(Debug, gc, heap, exit)) { |
347 if (log_is_enabled(Debug, gc, heap, exit)) { |
353 accumulated_time()->stop(); |
348 accumulated_time()->stop(); |
354 } |
349 } |
355 |
350 |
356 young_gen->print_used_change(young_gen_prev_used); |
351 heap->print_heap_change(pre_gc_values); |
357 old_gen->print_used_change(old_gen_prev_used); |
|
358 MetaspaceUtils::print_metaspace_change(metadata_prev_used); |
|
359 |
352 |
360 // Track memory usage and detect low memory |
353 // Track memory usage and detect low memory |
361 MemoryService::track_memory_usage(); |
354 MemoryService::track_memory_usage(); |
362 heap->update_counters(); |
355 heap->update_counters(); |
363 |
356 |
527 SystemDictionary::oops_do(mark_and_push_closure()); |
520 SystemDictionary::oops_do(mark_and_push_closure()); |
528 ClassLoaderDataGraph::always_strong_cld_do(follow_cld_closure()); |
521 ClassLoaderDataGraph::always_strong_cld_do(follow_cld_closure()); |
529 // Do not treat nmethods as strong roots for mark/sweep, since we can unload them. |
522 // Do not treat nmethods as strong roots for mark/sweep, since we can unload them. |
530 //ScavengableNMethods::scavengable_nmethods_do(CodeBlobToOopClosure(mark_and_push_closure())); |
523 //ScavengableNMethods::scavengable_nmethods_do(CodeBlobToOopClosure(mark_and_push_closure())); |
531 AOT_ONLY(AOTLoader::oops_do(mark_and_push_closure());) |
524 AOT_ONLY(AOTLoader::oops_do(mark_and_push_closure());) |
532 JVMCI_ONLY(JVMCI::oops_do(mark_and_push_closure());) |
|
533 } |
525 } |
534 |
526 |
535 // Flush marking stack. |
527 // Flush marking stack. |
536 follow_stack(); |
528 follow_stack(); |
537 |
529 |
623 |
615 |
624 CodeBlobToOopClosure adjust_from_blobs(adjust_pointer_closure(), CodeBlobToOopClosure::FixRelocations); |
616 CodeBlobToOopClosure adjust_from_blobs(adjust_pointer_closure(), CodeBlobToOopClosure::FixRelocations); |
625 CodeCache::blobs_do(&adjust_from_blobs); |
617 CodeCache::blobs_do(&adjust_from_blobs); |
626 AOT_ONLY(AOTLoader::oops_do(adjust_pointer_closure());) |
618 AOT_ONLY(AOTLoader::oops_do(adjust_pointer_closure());) |
627 |
619 |
628 JVMCI_ONLY(JVMCI::oops_do(adjust_pointer_closure());) |
|
629 |
|
630 ref_processor()->weak_oops_do(adjust_pointer_closure()); |
620 ref_processor()->weak_oops_do(adjust_pointer_closure()); |
631 PSScavenge::reference_processor()->weak_oops_do(adjust_pointer_closure()); |
621 PSScavenge::reference_processor()->weak_oops_do(adjust_pointer_closure()); |
632 |
622 |
633 adjust_marks(); |
623 adjust_marks(); |
634 |
624 |