< prev index next >

src/hotspot/share/gc/parallel/psPromotionManager.cpp

Print this page

        

*** 21,30 **** --- 21,31 ---- * questions. * */ #include "precompiled.hpp" + #include "classfile/javaClasses.inline.hpp" #include "gc/parallel/gcTaskManager.hpp" #include "gc/parallel/mutableSpace.hpp" #include "gc/parallel/parallelScavengeHeap.hpp" #include "gc/parallel/psOldGen.hpp" #include "gc/parallel/psPromotionManager.inline.hpp"
*** 33,48 **** --- 34,51 ---- #include "gc/shared/preservedMarks.inline.hpp" #include "gc/shared/taskqueue.inline.hpp" #include "logging/log.hpp" #include "logging/logStream.hpp" #include "memory/allocation.inline.hpp" + #include "memory/iterator.inline.hpp" #include "memory/memRegion.hpp" #include "memory/padded.inline.hpp" #include "memory/resourceArea.hpp" #include "oops/access.inline.hpp" #include "oops/arrayOop.inline.hpp" #include "oops/compressedOops.inline.hpp" + #include "oops/instanceClassLoaderKlass.inline.hpp" #include "oops/instanceKlass.inline.hpp" #include "oops/instanceMirrorKlass.inline.hpp" #include "oops/objArrayKlass.inline.hpp" #include "oops/objArrayOop.inline.hpp" #include "oops/oop.inline.hpp"
*** 392,433 **** } else { process_array_chunk_work<oop>(obj, start, end); } } ! class PushContentsClosure : public ExtendedOopClosure { PSPromotionManager* _pm; public: PushContentsClosure(PSPromotionManager* pm) : _pm(pm) {} ! template <typename T> void do_oop_nv(T* p) { if (PSScavenge::should_scavenge(p)) { _pm->claim_or_forward_depth(p); } } ! virtual void do_oop(oop* p) { do_oop_nv(p); } ! virtual void do_oop(narrowOop* p) { do_oop_nv(p); } // Don't use the oop verification code in the oop_oop_iterate framework. debug_only(virtual bool should_verify_oops() { return false; }) }; void InstanceKlass::oop_ps_push_contents(oop obj, PSPromotionManager* pm) { PushContentsClosure cl(pm); ! oop_oop_iterate_oop_maps_reverse<true>(obj, &cl); } void InstanceMirrorKlass::oop_ps_push_contents(oop obj, PSPromotionManager* pm) { // Note that we don't have to follow the mirror -> klass pointer, since all // klasses that are dirty will be scavenged when we iterate over the // ClassLoaderData objects. InstanceKlass::oop_ps_push_contents(obj, pm); PushContentsClosure cl(pm); ! oop_oop_iterate_statics<true>(obj, &cl); } void InstanceClassLoaderKlass::oop_ps_push_contents(oop obj, PSPromotionManager* pm) { InstanceKlass::oop_ps_push_contents(obj, pm); --- 395,444 ---- } else { process_array_chunk_work<oop>(obj, start, end); } } ! class PushContentsClosure : public BasicOopIterateClosure { PSPromotionManager* _pm; public: PushContentsClosure(PSPromotionManager* pm) : _pm(pm) {} ! template <typename T> void do_oop_work(T* p) { if (PSScavenge::should_scavenge(p)) { _pm->claim_or_forward_depth(p); } } ! virtual void do_oop(oop* p) { do_oop_work(p); } ! virtual void do_oop(narrowOop* p) { do_oop_work(p); } // Don't use the oop verification code in the oop_oop_iterate framework. debug_only(virtual bool should_verify_oops() { return false; }) }; void InstanceKlass::oop_ps_push_contents(oop obj, PSPromotionManager* pm) { PushContentsClosure cl(pm); ! if (UseCompressedOops) { ! oop_oop_iterate_oop_maps_reverse<narrowOop>(obj, &cl); ! } else { ! oop_oop_iterate_oop_maps_reverse<oop>(obj, &cl); ! } } void InstanceMirrorKlass::oop_ps_push_contents(oop obj, PSPromotionManager* pm) { // Note that we don't have to follow the mirror -> klass pointer, since all // klasses that are dirty will be scavenged when we iterate over the // ClassLoaderData objects. InstanceKlass::oop_ps_push_contents(obj, pm); PushContentsClosure cl(pm); ! if (UseCompressedOops) { ! oop_oop_iterate_statics<narrowOop>(obj, &cl); ! } else { ! oop_oop_iterate_statics<oop>(obj, &cl); ! } } void InstanceClassLoaderKlass::oop_ps_push_contents(oop obj, PSPromotionManager* pm) { InstanceKlass::oop_ps_push_contents(obj, pm);
*** 467,477 **** } void ObjArrayKlass::oop_ps_push_contents(oop obj, PSPromotionManager* pm) { assert(obj->is_objArray(), "obj must be obj array"); PushContentsClosure cl(pm); ! oop_oop_iterate_elements<true>(objArrayOop(obj), &cl); } void TypeArrayKlass::oop_ps_push_contents(oop obj, PSPromotionManager* pm) { assert(obj->is_typeArray(),"must be a type array"); ShouldNotReachHere(); --- 478,492 ---- } void ObjArrayKlass::oop_ps_push_contents(oop obj, PSPromotionManager* pm) { assert(obj->is_objArray(), "obj must be obj array"); PushContentsClosure cl(pm); ! if (UseCompressedOops) { ! oop_oop_iterate_elements<narrowOop>(objArrayOop(obj), &cl); ! } else { ! oop_oop_iterate_elements<oop>(objArrayOop(obj), &cl); ! } } void TypeArrayKlass::oop_ps_push_contents(oop obj, PSPromotionManager* pm) { assert(obj->is_typeArray(),"must be a type array"); ShouldNotReachHere();
< prev index next >