< prev index next >
src/hotspot/share/gc/parallel/psCompactionManager.inline.hpp
8211446_01: revision due to comments from StefanJ and Thomas
#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) {
***************
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");
***************
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
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 >