101 template <bool nv, class OopClosureType>
102 inline void oop_oop_iterate_ref_processing_bounded(oop obj, OopClosureType* closure, MemRegion mr);
103
104 // Reference processing
105 template <bool nv, class OopClosureType>
106 inline void oop_oop_iterate_ref_processing(oop obj, OopClosureType* closure);
107
108 // Building blocks for specialized handling.
109 template <bool nv, typename T, class OopClosureType, class Contains>
110 static void do_referent(oop obj, OopClosureType* closure, Contains& contains);
111
112 template <bool nv, typename T, class OopClosureType, class Contains>
113 static void do_next(oop obj, OopClosureType* closure, Contains& contains);
114
115 template <bool nv, typename T, class OopClosureType, class Contains>
116 static void do_discovered(oop obj, OopClosureType* closure, Contains& contains);
117
118 template <typename T, class OopClosureType>
119 static bool try_discover(oop obj, ReferenceType type, OopClosureType* closure);
120
121 // Do discovery while handling instance ref klasses, does reference
122 // processing only if a ReferenceProcessor has been supplied.
123 template <bool nv, typename T, class OopClosureType, class Contains>
124 static void oop_oop_iterate_discovery(oop obj, ReferenceType type, OopClosureType* closure, Contains& contains);
125
126 // Handle the fields, don't care about reference processing.
127 template <bool nv, typename T, class OopClosureType, class Contains>
128 static void oop_oop_iterate_fields(oop obj, OopClosureType* closure, Contains& contains);
129
130 template <typename T>
131 static void trace_reference_gc(const char *s, oop obj, T* referent_addr, T* next_addr, T* discovered_addr) NOT_DEBUG_RETURN;
132
133 public:
134
135 ALL_OOP_OOP_ITERATE_CLOSURES_1(OOP_OOP_ITERATE_DECL)
136 ALL_OOP_OOP_ITERATE_CLOSURES_2(OOP_OOP_ITERATE_DECL)
137
138 #if INCLUDE_ALL_GCS
139 ALL_OOP_OOP_ITERATE_CLOSURES_1(OOP_OOP_ITERATE_DECL_BACKWARDS)
140 ALL_OOP_OOP_ITERATE_CLOSURES_2(OOP_OOP_ITERATE_DECL_BACKWARDS)
141 #endif // INCLUDE_ALL_GCS
142
143 // Update non-static oop maps so 'referent', 'nextPending' and
144 // 'discovered' will look like non-oops
145 static void update_nonstatic_oop_maps(Klass* k);
146
|
101 template <bool nv, class OopClosureType>
102 inline void oop_oop_iterate_ref_processing_bounded(oop obj, OopClosureType* closure, MemRegion mr);
103
104 // Reference processing
105 template <bool nv, class OopClosureType>
106 inline void oop_oop_iterate_ref_processing(oop obj, OopClosureType* closure);
107
108 // Building blocks for specialized handling.
109 template <bool nv, typename T, class OopClosureType, class Contains>
110 static void do_referent(oop obj, OopClosureType* closure, Contains& contains);
111
112 template <bool nv, typename T, class OopClosureType, class Contains>
113 static void do_next(oop obj, OopClosureType* closure, Contains& contains);
114
115 template <bool nv, typename T, class OopClosureType, class Contains>
116 static void do_discovered(oop obj, OopClosureType* closure, Contains& contains);
117
118 template <typename T, class OopClosureType>
119 static bool try_discover(oop obj, ReferenceType type, OopClosureType* closure);
120
121 // Do discovery while handling InstanceRefKlasses. Reference discovery
122 // is only done if the closure provides a ReferenceProcessor.
123 template <bool nv, typename T, class OopClosureType, class Contains>
124 static void oop_oop_iterate_discovery(oop obj, ReferenceType type, OopClosureType* closure, Contains& contains);
125
126 // Apply the closure to all fields. No reference discovery is done.
127 template <bool nv, typename T, class OopClosureType, class Contains>
128 static void oop_oop_iterate_fields(oop obj, OopClosureType* closure, Contains& contains);
129
130 template <typename T>
131 static void trace_reference_gc(const char *s, oop obj, T* referent_addr, T* next_addr, T* discovered_addr) NOT_DEBUG_RETURN;
132
133 public:
134
135 ALL_OOP_OOP_ITERATE_CLOSURES_1(OOP_OOP_ITERATE_DECL)
136 ALL_OOP_OOP_ITERATE_CLOSURES_2(OOP_OOP_ITERATE_DECL)
137
138 #if INCLUDE_ALL_GCS
139 ALL_OOP_OOP_ITERATE_CLOSURES_1(OOP_OOP_ITERATE_DECL_BACKWARDS)
140 ALL_OOP_OOP_ITERATE_CLOSURES_2(OOP_OOP_ITERATE_DECL_BACKWARDS)
141 #endif // INCLUDE_ALL_GCS
142
143 // Update non-static oop maps so 'referent', 'nextPending' and
144 // 'discovered' will look like non-oops
145 static void update_nonstatic_oop_maps(Klass* k);
146
|