Mercurial > hg > graal-jvmci-8
comparison src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp @ 4909:95f6641e38e0
7144296: PS: Optimize nmethods processing
Summary: Prunes scavenge roots in code list every young GC, promote objects directly pointed by the code immediately
Reviewed-by: johnc, jcoomes
author | iveresov |
---|---|
date | Fri, 10 Feb 2012 17:40:20 -0800 |
parents | aa3d708d67c4 |
children | ab4422d0ed59 |
comparison
equal
deleted
inserted
replaced
4888:3c4621be5149 | 4909:95f6641e38e0 |
---|---|
22 * | 22 * |
23 */ | 23 */ |
24 | 24 |
25 #include "precompiled.hpp" | 25 #include "precompiled.hpp" |
26 #include "classfile/symbolTable.hpp" | 26 #include "classfile/symbolTable.hpp" |
27 #include "code/codeCache.hpp" | |
27 #include "gc_implementation/parallelScavenge/cardTableExtension.hpp" | 28 #include "gc_implementation/parallelScavenge/cardTableExtension.hpp" |
28 #include "gc_implementation/parallelScavenge/gcTaskManager.hpp" | 29 #include "gc_implementation/parallelScavenge/gcTaskManager.hpp" |
29 #include "gc_implementation/parallelScavenge/generationSizer.hpp" | 30 #include "gc_implementation/parallelScavenge/generationSizer.hpp" |
30 #include "gc_implementation/parallelScavenge/parallelScavengeHeap.hpp" | 31 #include "gc_implementation/parallelScavenge/parallelScavengeHeap.hpp" |
31 #include "gc_implementation/parallelScavenge/psAdaptiveSizePolicy.hpp" | 32 #include "gc_implementation/parallelScavenge/psAdaptiveSizePolicy.hpp" |
98 assert ((oopDesc::load_decode_heap_oop_not_null(p))->is_oop(), | 99 assert ((oopDesc::load_decode_heap_oop_not_null(p))->is_oop(), |
99 "expected an oop while scanning weak refs"); | 100 "expected an oop while scanning weak refs"); |
100 | 101 |
101 // Weak refs may be visited more than once. | 102 // Weak refs may be visited more than once. |
102 if (PSScavenge::should_scavenge(p, _to_space)) { | 103 if (PSScavenge::should_scavenge(p, _to_space)) { |
103 PSScavenge::copy_and_push_safe_barrier(_promotion_manager, p); | 104 PSScavenge::copy_and_push_safe_barrier<T, /*promote_immediately=*/false>(_promotion_manager, p); |
104 } | 105 } |
105 } | 106 } |
106 virtual void do_oop(oop* p) { PSKeepAliveClosure::do_oop_work(p); } | 107 virtual void do_oop(oop* p) { PSKeepAliveClosure::do_oop_work(p); } |
107 virtual void do_oop(narrowOop* p) { PSKeepAliveClosure::do_oop_work(p); } | 108 virtual void do_oop(narrowOop* p) { PSKeepAliveClosure::do_oop_work(p); } |
108 }; | 109 }; |
600 | 601 |
601 COMPILER2_PRESENT(DerivedPointerTable::update_pointers()); | 602 COMPILER2_PRESENT(DerivedPointerTable::update_pointers()); |
602 | 603 |
603 NOT_PRODUCT(reference_processor()->verify_no_references_recorded()); | 604 NOT_PRODUCT(reference_processor()->verify_no_references_recorded()); |
604 | 605 |
606 CodeCache::prune_scavenge_root_nmethods(); | |
607 | |
605 // Re-verify object start arrays | 608 // Re-verify object start arrays |
606 if (VerifyObjectStartArray && | 609 if (VerifyObjectStartArray && |
607 VerifyAfterGC) { | 610 VerifyAfterGC) { |
608 old_gen->verify_object_start_array(); | 611 old_gen->verify_object_start_array(); |
609 perm_gen->verify_object_start_array(); | 612 perm_gen->verify_object_start_array(); |