< prev index next >

src/hotspot/share/gc/shared/genCollectedHeap.cpp

Print this page

        

*** 45,54 **** --- 45,55 ---- #include "gc/shared/gcVMOperations.hpp" #include "gc/shared/genCollectedHeap.hpp" #include "gc/shared/genOopClosures.inline.hpp" #include "gc/shared/generationSpec.hpp" #include "gc/shared/oopStorageParState.inline.hpp" + #include "gc/shared/scavengableNMethods.hpp" #include "gc/shared/space.hpp" #include "gc/shared/strongRootsScope.hpp" #include "gc/shared/weakProcessor.hpp" #include "gc/shared/workgroup.hpp" #include "memory/filemap.hpp"
*** 173,182 **** --- 174,194 ---- heap_rs->size()); return heap_rs->base(); } + namespace { + class GenIsScavengable : public BoolObjectClosure { + public: + bool do_object_b(oop obj) { + return GenCollectedHeap::heap()->is_in_young(obj); + } + }; + + GenIsScavengable _is_scavengable; + } + void GenCollectedHeap::post_initialize() { CollectedHeap::post_initialize(); ref_processing_init(); DefNewGeneration* def_new_gen = (DefNewGeneration*)_young_gen;
*** 184,193 **** --- 196,207 ---- initialize_size_policy(def_new_gen->eden()->capacity(), _old_gen->capacity(), def_new_gen->from()->capacity()); MarkSweep::initialize(); + + ScavengableNMethods::initialize(&_is_scavengable); } void GenCollectedHeap::ref_processing_init() { _young_gen->ref_processor_init(); _old_gen->ref_processor_init();
*** 683,697 **** ParallelTaskTerminator::print_termination_counts(); #endif } void GenCollectedHeap::register_nmethod(nmethod* nm) { ! CodeCache::register_scavenge_root_nmethod(nm); } void GenCollectedHeap::verify_nmethod(nmethod* nm) { ! CodeCache::verify_scavenge_root_nmethod(nm); } HeapWord* GenCollectedHeap::satisfy_failed_allocation(size_t size, bool is_tlab) { GCCauseSetter x(this, GCCause::_allocation_failure); HeapWord* result = NULL; --- 697,723 ---- ParallelTaskTerminator::print_termination_counts(); #endif } void GenCollectedHeap::register_nmethod(nmethod* nm) { ! ScavengableNMethods::register_nmethod(nm); ! } ! ! void GenCollectedHeap::unregister_nmethod(nmethod* nm) { ! ScavengableNMethods::unregister_nmethod(nm); } void GenCollectedHeap::verify_nmethod(nmethod* nm) { ! ScavengableNMethods::verify_nmethod(nm); ! } ! ! void GenCollectedHeap::flush_nmethod(nmethod* nm) { ! ScavengableNMethods::flush_nmethod(nm); ! } ! ! void GenCollectedHeap::prune_nmethods() { ! ScavengableNMethods::prune_nmethods(); } HeapWord* GenCollectedHeap::satisfy_failed_allocation(size_t size, bool is_tlab) { GCCauseSetter x(this, GCCause::_allocation_failure); HeapWord* result = NULL;
*** 831,841 **** if (_process_strong_tasks->try_claim_task(GCH_PS_CodeCache_oops_do)) { if (so & SO_ScavengeCodeCache) { assert(code_roots != NULL, "must supply closure for code cache"); // We only visit parts of the CodeCache when scavenging. ! CodeCache::scavenge_root_nmethods_do(code_roots); } if (so & SO_AllCodeCache) { assert(code_roots != NULL, "must supply closure for code cache"); // CMSCollector uses this to do intermediate-strength collections. --- 857,867 ---- if (_process_strong_tasks->try_claim_task(GCH_PS_CodeCache_oops_do)) { if (so & SO_ScavengeCodeCache) { assert(code_roots != NULL, "must supply closure for code cache"); // We only visit parts of the CodeCache when scavenging. ! ScavengableNMethods::scavengable_nmethods_do(code_roots); } if (so & SO_AllCodeCache) { assert(code_roots != NULL, "must supply closure for code cache"); // CMSCollector uses this to do intermediate-strength collections.
*** 843,853 **** CodeCache::blobs_do(code_roots); } // Verify that the code cache contents are not subject to // movement by a scavenging collection. DEBUG_ONLY(CodeBlobToOopClosure assert_code_is_non_scavengable(&assert_is_non_scavengable_closure, !CodeBlobToOopClosure::FixRelocations)); ! DEBUG_ONLY(CodeCache::asserted_non_scavengable_nmethods_do(&assert_code_is_non_scavengable)); } } void GenCollectedHeap::young_process_roots(StrongRootsScope* scope, OopsInGenClosure* root_closure, --- 869,879 ---- CodeCache::blobs_do(code_roots); } // Verify that the code cache contents are not subject to // movement by a scavenging collection. DEBUG_ONLY(CodeBlobToOopClosure assert_code_is_non_scavengable(&assert_is_non_scavengable_closure, !CodeBlobToOopClosure::FixRelocations)); ! DEBUG_ONLY(ScavengableNMethods::asserted_non_scavengable_nmethods_do(&assert_code_is_non_scavengable)); } } void GenCollectedHeap::young_process_roots(StrongRootsScope* scope, OopsInGenClosure* root_closure,
< prev index next >