109 // Do discovery while handling InstanceRefKlasses. Reference discovery
110 // is only done if the closure provides a ReferenceProcessor.
111 template <typename T, class OopClosureType, class Contains>
112 static void oop_oop_iterate_discovery(oop obj, ReferenceType type, OopClosureType* closure, Contains& contains);
113
114 // Used for a special case in G1 where the closure needs to be applied
115 // to the discovered field. Reference discovery is also done if the
116 // closure provides a ReferenceProcessor.
117 template <typename T, class OopClosureType, class Contains>
118 static void oop_oop_iterate_discovered_and_discovery(oop obj, ReferenceType type, OopClosureType* closure, Contains& contains);
119
120 // Apply the closure to all fields. No reference discovery is done.
121 template <typename T, class OopClosureType, class Contains>
122 static void oop_oop_iterate_fields(oop obj, OopClosureType* closure, Contains& contains);
123
124 // Apply the closure to all fields, except the referent field. No reference discovery is done.
125 template <typename T, class OopClosureType, class Contains>
126 static void oop_oop_iterate_fields_except_referent(oop obj, OopClosureType* closure, Contains& contains);
127
128 template <typename T>
129 static void trace_reference_gc(const char *s, oop obj) NOT_DEBUG_RETURN;
130
131 public:
132 // Update non-static oop maps so 'referent', 'nextPending' and
133 // 'discovered' will look like non-oops
134 static void update_nonstatic_oop_maps(Klass* k);
135
136 public:
137 // Verification
138 void oop_verify_on(oop obj, outputStream* st);
139 };
140
141 #endif // SHARE_OOPS_INSTANCEREFKLASS_HPP
|
109 // Do discovery while handling InstanceRefKlasses. Reference discovery
110 // is only done if the closure provides a ReferenceProcessor.
111 template <typename T, class OopClosureType, class Contains>
112 static void oop_oop_iterate_discovery(oop obj, ReferenceType type, OopClosureType* closure, Contains& contains);
113
114 // Used for a special case in G1 where the closure needs to be applied
115 // to the discovered field. Reference discovery is also done if the
116 // closure provides a ReferenceProcessor.
117 template <typename T, class OopClosureType, class Contains>
118 static void oop_oop_iterate_discovered_and_discovery(oop obj, ReferenceType type, OopClosureType* closure, Contains& contains);
119
120 // Apply the closure to all fields. No reference discovery is done.
121 template <typename T, class OopClosureType, class Contains>
122 static void oop_oop_iterate_fields(oop obj, OopClosureType* closure, Contains& contains);
123
124 // Apply the closure to all fields, except the referent field. No reference discovery is done.
125 template <typename T, class OopClosureType, class Contains>
126 static void oop_oop_iterate_fields_except_referent(oop obj, OopClosureType* closure, Contains& contains);
127
128 template <typename T>
129 void trace_reference_gc(const char *s, oop obj) NOT_DEBUG_RETURN;
130
131 public:
132 // Update non-static oop maps so 'referent', 'nextPending' and
133 // 'discovered' will look like non-oops
134 static void update_nonstatic_oop_maps(Klass* k);
135
136 public:
137 // Verification
138 void oop_verify_on(oop obj, outputStream* st);
139 };
140
141 #endif // SHARE_OOPS_INSTANCEREFKLASS_HPP
|