Mercurial > hg > graal-jvmci-8
comparison src/share/vm/gc_implementation/g1/concurrentMark.cpp @ 20619:b12a2a9b05ca
8056240: Investigate increased GC remark time after class unloading changes in CRM Fuse
Reviewed-by: mgerdin, coleenp, bdelsart
author | stefank |
---|---|
date | Thu, 02 Oct 2014 10:55:36 +0200 |
parents | e7d0505c8a30 |
children | 8d27d6113625 |
comparison
equal
deleted
inserted
replaced
20618:7024b693c8f9 | 20619:b12a2a9b05ca |
---|---|
21 * questions. | 21 * questions. |
22 * | 22 * |
23 */ | 23 */ |
24 | 24 |
25 #include "precompiled.hpp" | 25 #include "precompiled.hpp" |
26 #include "classfile/metadataOnStackMark.hpp" | |
26 #include "classfile/symbolTable.hpp" | 27 #include "classfile/symbolTable.hpp" |
27 #include "code/codeCache.hpp" | 28 #include "code/codeCache.hpp" |
28 #include "gc_implementation/g1/concurrentMark.inline.hpp" | 29 #include "gc_implementation/g1/concurrentMark.inline.hpp" |
29 #include "gc_implementation/g1/concurrentMarkThread.inline.hpp" | 30 #include "gc_implementation/g1/concurrentMarkThread.inline.hpp" |
30 #include "gc_implementation/g1/g1CollectedHeap.inline.hpp" | 31 #include "gc_implementation/g1/g1CollectedHeap.inline.hpp" |
2600 // Unload Klasses, String, Symbols, Code Cache, etc. | 2601 // Unload Klasses, String, Symbols, Code Cache, etc. |
2601 { | 2602 { |
2602 G1RemarkGCTraceTime trace("Unloading", G1Log::finer()); | 2603 G1RemarkGCTraceTime trace("Unloading", G1Log::finer()); |
2603 | 2604 |
2604 if (ClassUnloadingWithConcurrentMark) { | 2605 if (ClassUnloadingWithConcurrentMark) { |
2606 // Cleaning of klasses depends on correct information from MetadataMarkOnStack. The CodeCache::mark_on_stack | |
2607 // part is too slow to be done serially, so it is handled during the weakRefsWorkParallelPart phase. | |
2608 // Defer the cleaning until we have complete on_stack data. | |
2609 MetadataOnStackMark md_on_stack(false /* Don't visit the code cache at this point */); | |
2610 | |
2605 bool purged_classes; | 2611 bool purged_classes; |
2606 | 2612 |
2607 { | 2613 { |
2608 G1RemarkGCTraceTime trace("System Dictionary Unloading", G1Log::finest()); | 2614 G1RemarkGCTraceTime trace("System Dictionary Unloading", G1Log::finest()); |
2609 purged_classes = SystemDictionary::do_unloading(&g1_is_alive); | 2615 purged_classes = SystemDictionary::do_unloading(&g1_is_alive, false /* Defer klass cleaning */); |
2610 } | 2616 } |
2611 | 2617 |
2612 { | 2618 { |
2613 G1RemarkGCTraceTime trace("Parallel Unloading", G1Log::finest()); | 2619 G1RemarkGCTraceTime trace("Parallel Unloading", G1Log::finest()); |
2614 weakRefsWorkParallelPart(&g1_is_alive, purged_classes); | 2620 weakRefsWorkParallelPart(&g1_is_alive, purged_classes); |
2621 } | |
2622 | |
2623 { | |
2624 G1RemarkGCTraceTime trace("Deallocate Metadata", G1Log::finest()); | |
2625 ClassLoaderDataGraph::free_deallocate_lists(); | |
2615 } | 2626 } |
2616 } | 2627 } |
2617 | 2628 |
2618 if (G1StringDedup::is_enabled()) { | 2629 if (G1StringDedup::is_enabled()) { |
2619 G1RemarkGCTraceTime trace("String Deduplication Unlink", G1Log::finest()); | 2630 G1RemarkGCTraceTime trace("String Deduplication Unlink", G1Log::finest()); |