< 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 >