< prev index next >

src/share/vm/oops/instanceRefKlass.inline.hpp

Print this page
rev 12851 : 8138737: Remove oop_ms_adjust_pointers and use oop_iterate instead
Reviewed-by:
rev 12852 : [mq]: 8138737-remove-oop-ms-adjust-kbarrett-rev1
rev 12853 : [mq]: 8138737-remove-oop-ms-adjust-stefank-rev1
rev 12854 : 8138888: Remove ExtendedOopClosure::apply_to_weak_ref_discovered_field
Reviewed-by:

*** 77,91 **** template <bool nv, typename T, class OopClosureType, class Contains> void InstanceRefKlass::oop_oop_iterate_discovery(oop obj, ReferenceType type, OopClosureType* closure, Contains& contains) { log_develop_trace(gc, ref)("Process reference with discovery " PTR_FORMAT, p2i(obj)); - // Special case for some closures. - if (closure->apply_to_weak_ref_discovered_field()) { - do_discovered<nv, T>(obj, closure, contains); - } - // Try to discover reference and return if it succeeds. if (try_discover<T>(obj, type, closure)) { return; } --- 77,86 ----
*** 114,128 **** --- 109,134 ---- (T*)java_lang_ref_Reference::next_addr(obj), (T*)java_lang_ref_Reference::discovered_addr(obj)); } template <bool nv, typename T, class OopClosureType, class Contains> + void InstanceRefKlass::oop_oop_iterate_discovered_and_discovery(oop obj, ReferenceType type, OopClosureType* closure, Contains& contains) { + // Explicitly apply closure to the discovered field. + do_discovered<nv, T>(obj, closure, contains); + // Then do normal reference processing with discovery. + oop_oop_iterate_discovery<nv, T>(obj, type, closure, contains); + } + + template <bool nv, typename T, class OopClosureType, class Contains> void InstanceRefKlass::oop_oop_iterate_ref_processing_specialized(oop obj, OopClosureType* closure, Contains& contains) { switch (closure->reference_iteration_mode()) { case ExtendedOopClosure::DO_DISCOVERY: oop_oop_iterate_discovery<nv, T>(obj, reference_type(), closure, contains); break; + case ExtendedOopClosure::DO_DISCOVERED_AND_DISCOVERY: + oop_oop_iterate_discovered_and_discovery<nv, T>(obj, reference_type(), closure, contains); + break; case ExtendedOopClosure::DO_FIELDS: oop_oop_iterate_fields<nv, T>(obj, closure, contains); break; default: ShouldNotReachHere();
< prev index next >