< prev index next >

src/share/vm/oops/instanceRefKlass.hpp

Print this page
rev 12851 : 8138737: Remove oop_ms_adjust_pointers and use oop_iterate instead
Reviewed-by:

*** 48,67 **** // and the pending list lock object in the same class is notified. class InstanceRefKlass: public InstanceKlass { friend class InstanceKlass; private: InstanceRefKlass(const ClassFileParser& parser) : InstanceKlass(parser, InstanceKlass::_misc_kind_reference) {} public: InstanceRefKlass() { assert(DumpSharedSpaces || UseSharedSpaces, "only for CDS"); } // GC specific object visitors // - // Mark Sweep - int oop_ms_adjust_pointers(oop obj); #if INCLUDE_ALL_GCS // Parallel Scavenge void oop_ps_push_contents( oop obj, PSPromotionManager* pm); // Parallel Compact void oop_pc_follow_contents(oop obj, ParCompactionManager* cm); --- 48,67 ---- // and the pending list lock object in the same class is notified. class InstanceRefKlass: public InstanceKlass { friend class InstanceKlass; + template <bool nv, typename T, class OopClosureType, class Contains> + friend class InstanceRefKlassSpecialized; private: InstanceRefKlass(const ClassFileParser& parser) : InstanceKlass(parser, InstanceKlass::_misc_kind_reference) {} public: InstanceRefKlass() { assert(DumpSharedSpaces || UseSharedSpaces, "only for CDS"); } // GC specific object visitors // #if INCLUDE_ALL_GCS // Parallel Scavenge void oop_ps_push_contents( oop obj, PSPromotionManager* pm); // Parallel Compact void oop_pc_follow_contents(oop obj, ParCompactionManager* cm);
*** 105,114 **** --- 105,140 ---- // Reference processing template <bool nv, class OopClosureType> inline void oop_oop_iterate_ref_processing(oop obj, OopClosureType* closure); + // Building blocks for specialized handling. + template <bool nv, typename T, class OopClosureType, class Contains> + static void do_referent(oop obj, OopClosureType* closure, Contains& contains); + + template <bool nv, typename T, class OopClosureType, class Contains> + static void do_next(oop obj, OopClosureType* closure, Contains& contains); + + template <bool nv, typename T, class OopClosureType, class Contains> + static void do_discovered(oop obj, OopClosureType* closure, Contains& contains); + + template <typename T, class OopClosureType> + static bool try_discover(oop obj, ReferenceType type, OopClosureType* closure); + + // Default way of handling instance ref klasses, does reference + // processing if a ReferenceProcessor has been supplied. + template <bool nv, typename T, class OopClosureType, class Contains> + static void oop_oop_iterate_discovery(oop obj, ReferenceType type, OopClosureType* closure, Contains& contains); + + // Just handle the fields, don't care about reference processing. + template <bool nv, typename T, class OopClosureType, class Contains> + static void oop_oop_iterate_fields(oop obj, OopClosureType* closure, Contains& contains); + + #ifdef ASSERT + template <typename T> + static void trace_reference_gc(const char *s, oop obj, T* referent_addr, T* next_addr, T* discovered_addr); + #endif public: ALL_OOP_OOP_ITERATE_CLOSURES_1(OOP_OOP_ITERATE_DECL) ALL_OOP_OOP_ITERATE_CLOSURES_2(OOP_OOP_ITERATE_DECL)
< prev index next >