src/hotspot/share/oops/instanceRefKlass.inline.hpp
changeset 50870 830b05ca7f58
parent 50752 9d62da00bf15
child 51516 7c3891b9f1e0
equal deleted inserted replaced
50869:be1020446dd5 50870:830b05ca7f58
    87   do_referent<T>(obj, closure, contains);
    87   do_referent<T>(obj, closure, contains);
    88   do_discovered<T>(obj, closure, contains);
    88   do_discovered<T>(obj, closure, contains);
    89 }
    89 }
    90 
    90 
    91 template <typename T, class OopClosureType, class Contains>
    91 template <typename T, class OopClosureType, class Contains>
       
    92 void InstanceRefKlass::oop_oop_iterate_discovered_and_discovery(oop obj, ReferenceType type, OopClosureType* closure, Contains& contains) {
       
    93   // Explicitly apply closure to the discovered field.
       
    94   do_discovered<T>(obj, closure, contains);
       
    95   // Then do normal reference processing with discovery.
       
    96   oop_oop_iterate_discovery<T>(obj, type, closure, contains);
       
    97 }
       
    98 
       
    99 template <typename T, class OopClosureType, class Contains>
    92 void InstanceRefKlass::oop_oop_iterate_fields(oop obj, OopClosureType* closure, Contains& contains) {
   100 void InstanceRefKlass::oop_oop_iterate_fields(oop obj, OopClosureType* closure, Contains& contains) {
    93   do_referent<T>(obj, closure, contains);
   101   do_referent<T>(obj, closure, contains);
    94   do_discovered<T>(obj, closure, contains);
   102   do_discovered<T>(obj, closure, contains);
    95 }
   103 }
    96 
   104 
    97 template <typename T, class OopClosureType, class Contains>
   105 template <typename T, class OopClosureType, class Contains>
    98 void InstanceRefKlass::oop_oop_iterate_discovered_and_discovery(oop obj, ReferenceType type, OopClosureType* closure, Contains& contains) {
   106 void InstanceRefKlass::oop_oop_iterate_fields_except_referent(oop obj, OopClosureType* closure, Contains& contains) {
    99   // Explicitly apply closure to the discovered field.
       
   100   do_discovered<T>(obj, closure, contains);
   107   do_discovered<T>(obj, closure, contains);
   101   // Then do normal reference processing with discovery.
       
   102   oop_oop_iterate_discovery<T>(obj, type, closure, contains);
       
   103 }
   108 }
   104 
   109 
   105 template <typename T, class OopClosureType, class Contains>
   110 template <typename T, class OopClosureType, class Contains>
   106 void InstanceRefKlass::oop_oop_iterate_ref_processing(oop obj, OopClosureType* closure, Contains& contains) {
   111 void InstanceRefKlass::oop_oop_iterate_ref_processing(oop obj, OopClosureType* closure, Contains& contains) {
   107   switch (closure->reference_iteration_mode()) {
   112   switch (closure->reference_iteration_mode()) {
   114       oop_oop_iterate_discovered_and_discovery<T>(obj, reference_type(), closure, contains);
   119       oop_oop_iterate_discovered_and_discovery<T>(obj, reference_type(), closure, contains);
   115       break;
   120       break;
   116     case OopIterateClosure::DO_FIELDS:
   121     case OopIterateClosure::DO_FIELDS:
   117       trace_reference_gc<T>("do_fields", obj);
   122       trace_reference_gc<T>("do_fields", obj);
   118       oop_oop_iterate_fields<T>(obj, closure, contains);
   123       oop_oop_iterate_fields<T>(obj, closure, contains);
       
   124       break;
       
   125     case OopIterateClosure::DO_FIELDS_EXCEPT_REFERENT:
       
   126       trace_reference_gc<T>("do_fields_except_referent", obj);
       
   127       oop_oop_iterate_fields_except_referent<T>(obj, closure, contains);
   119       break;
   128       break;
   120     default:
   129     default:
   121       ShouldNotReachHere();
   130       ShouldNotReachHere();
   122   }
   131   }
   123 }
   132 }