--- old/src/share/vm/gc/serial/markSweep.hpp 2015-06-22 11:04:43.394677312 +0200 +++ new/src/share/vm/gc/serial/markSweep.hpp 2015-06-22 11:04:43.250676598 +0200 @@ -49,6 +49,7 @@ // declared at end class PreservedMark; +class MarkAndPushClosure; class MarkSweep : AllStatic { // @@ -60,13 +61,6 @@ virtual void do_oop(narrowOop* p); }; - class MarkAndPushClosure: public ExtendedOopClosure { - public: - template void do_oop_nv(T* p); - virtual void do_oop(oop* p); - virtual void do_oop(narrowOop* p); - }; - class FollowStackClosure: public VoidClosure { public: virtual void do_void(); @@ -146,6 +140,7 @@ // Reference Processing static ReferenceProcessor* const ref_processor() { return _ref_processor; } + static void set_ref_processor(ReferenceProcessor* rp); // Archive Object handling static inline bool is_archive_object(oop object); @@ -171,7 +166,7 @@ static void follow_klass(Klass* klass); - static void follow_class_loader(ClassLoaderData* cld); + static void follow_cld(ClassLoaderData* cld); static int adjust_pointers(oop obj); @@ -183,6 +178,24 @@ template static inline void adjust_pointer(T* p); }; +class MarkAndPushClosure: public ExtendedOopClosure { +public: + template void do_oop_nv(T* p); + virtual void do_oop(oop* p); + virtual void do_oop(narrowOop* p); + + virtual bool do_metadata(); + bool do_metadata_nv(); + + virtual void do_klass(Klass* k); + void do_klass_nv(Klass* k); + + virtual void do_cld(ClassLoaderData* cld); + void do_cld_nv(ClassLoaderData* cld); + + void set_ref_processor(ReferenceProcessor* rp) { _ref_processor = rp; } +}; + class PreservedMark VALUE_OBJ_CLASS_SPEC { private: oop _obj;