< prev index next >

src/hotspot/share/gc/parallel/psCompactionManager.inline.hpp

8211446_01: revision due to comments from StefanJ and Thomas

*** 36,45 **** --- 36,76 ---- #include "oops/objArrayOop.inline.hpp" #include "oops/oop.inline.hpp" #include "utilities/debug.hpp" #include "utilities/globalDefinitions.hpp" + class PCMarkAndPushClosure: public OopClosure { + private: + ParCompactionManager* _compaction_manager; + public: + PCMarkAndPushClosure(ParCompactionManager* cm) : _compaction_manager(cm) { } + + template <typename T> void do_oop_nv(T* p) { _compaction_manager->mark_and_push(p); } + virtual void do_oop(oop* p) { do_oop_nv(p); } + virtual void do_oop(narrowOop* p) { do_oop_nv(p); } + + // This closure provides its own oop verification code. + debug_only(virtual bool should_verify_oops() { return false; }) + }; + + class PCIterateMarkAndPushClosure: public MetadataVisitingOopIterateClosure { + private: + ParCompactionManager* _compaction_manager; + public: + PCIterateMarkAndPushClosure(ParCompactionManager* cm, ReferenceProcessor* rp) : MetadataVisitingOopIterateClosure(rp), _compaction_manager(cm) { } + + template <typename T> void do_oop_nv(T* p) { _compaction_manager->mark_and_push(p); } + virtual void do_oop(oop* p) { do_oop_nv(p); } + virtual void do_oop(narrowOop* p) { do_oop_nv(p); } + + void do_klass_nv(Klass* k) { _compaction_manager->follow_klass(k); } + void do_cld_nv(ClassLoaderData* cld) { _compaction_manager->follow_class_loader(cld); } + + // This closure provides its own oop verification code. + debug_only(virtual bool should_verify_oops() { return false; }) + }; + inline bool ParCompactionManager::steal(int queue_num, oop& t) { return stack_array()->steal(queue_num, t); } inline bool ParCompactionManager::steal_objarray(int queue_num, ObjArrayTask& t) { ***************
*** 92,103 **** inline void ParCompactionManager::FollowStackClosure::do_void() { _compaction_manager->follow_marking_stacks(); } - - template <typename T> inline void follow_array_specialized(objArrayOop obj, int index, ParCompactionManager* cm) { const size_t len = size_t(obj->length()); const size_t beg_index = size_t(index); assert(beg_index < len || len == 0, "index too large"); --- 123,132 ---- ***************
*** 128,179 **** inline void ParCompactionManager::update_contents(oop obj) { obj->pc_update_contents(this); } - class PSMarkAndPushClosure: public OopClosure { - private: - ParCompactionManager* _compaction_manager; - public: - PSMarkAndPushClosure(ParCompactionManager* cm) : _compaction_manager(cm) { } - - template <typename T> void do_oop_nv(T* p) { _compaction_manager->mark_and_push(p); } - virtual void do_oop(oop* p) { do_oop_nv(p); } - virtual void do_oop(narrowOop* p) { do_oop_nv(p); } - - // This closure provides its own oop verification code. - debug_only(virtual bool should_verify_oops() { return false; }) - }; - - class PSIterateMarkAndPushClosure: public MetadataVisitingOopIterateClosure { - private: - ParCompactionManager* _compaction_manager; - public: - PSIterateMarkAndPushClosure(ParCompactionManager* cm, ReferenceProcessor* rp) : MetadataVisitingOopIterateClosure(rp), _compaction_manager(cm) { } - - template <typename T> void do_oop_nv(T* p) { _compaction_manager->mark_and_push(p); } - virtual void do_oop(oop* p) { do_oop_nv(p); } - virtual void do_oop(narrowOop* p) { do_oop_nv(p); } - - void do_klass_nv(Klass* k) { _compaction_manager->follow_klass(k); } - void do_cld_nv(ClassLoaderData* cld) { _compaction_manager->follow_class_loader(cld); } - - // This closure provides its own oop verification code. - debug_only(virtual bool should_verify_oops() { return false; }) - }; - inline void ParCompactionManager::follow_class_loader(ClassLoaderData* cld) { ! PSMarkAndPushClosure mark_and_push_closure(this); cld->oops_do(&mark_and_push_closure, true); } inline void ParCompactionManager::follow_contents(oop obj) { assert(PSParallelCompact::mark_bitmap()->is_marked(obj), "should be marked"); if (obj->is_objArray()) { follow_array(objArrayOop(obj), 0); } else { ! PSIterateMarkAndPushClosure cl(this, PSParallelCompact::ref_processor()); obj->oop_iterate(&cl); } } #endif // SHARE_VM_GC_PARALLEL_PSCOMPACTIONMANAGER_INLINE_HPP --- 157,177 ---- inline void ParCompactionManager::update_contents(oop obj) { obj->pc_update_contents(this); } inline void ParCompactionManager::follow_class_loader(ClassLoaderData* cld) { ! PCMarkAndPushClosure mark_and_push_closure(this); cld->oops_do(&mark_and_push_closure, true); } inline void ParCompactionManager::follow_contents(oop obj) { assert(PSParallelCompact::mark_bitmap()->is_marked(obj), "should be marked"); if (obj->is_objArray()) { follow_array(objArrayOop(obj), 0); } else { ! PCIterateMarkAndPushClosure cl(this, PSParallelCompact::ref_processor()); obj->oop_iterate(&cl); } } #endif // SHARE_VM_GC_PARALLEL_PSCOMPACTIONMANAGER_INLINE_HPP
< prev index next >