< prev index next >

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

Print this page
rev 51626 : imported patch 8209843-too-much-reference-processing


  81   // Try to discover reference and return if it succeeds.
  82   if (try_discover<T>(obj, type, closure)) {
  83     return;
  84   }
  85 
  86   // Treat referent and discovered as normal oops.
  87   do_referent<T>(obj, closure, contains);
  88   do_discovered<T>(obj, closure, contains);
  89 }
  90 
  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>
 100 void InstanceRefKlass::oop_oop_iterate_fields(oop obj, OopClosureType* closure, Contains& contains) {

 101   do_referent<T>(obj, closure, contains);
 102   do_discovered<T>(obj, closure, contains);
 103 }
 104 
 105 template <typename T, class OopClosureType, class Contains>
 106 void InstanceRefKlass::oop_oop_iterate_fields_except_referent(oop obj, OopClosureType* closure, Contains& contains) {

 107   do_discovered<T>(obj, closure, contains);
 108 }
 109 
 110 template <typename T, class OopClosureType, class Contains>
 111 void InstanceRefKlass::oop_oop_iterate_ref_processing(oop obj, OopClosureType* closure, Contains& contains) {
 112   switch (closure->reference_iteration_mode()) {
 113     case OopIterateClosure::DO_DISCOVERY:
 114       trace_reference_gc<T>("do_discovery", obj);
 115       oop_oop_iterate_discovery<T>(obj, reference_type(), closure, contains);
 116       break;
 117     case OopIterateClosure::DO_DISCOVERED_AND_DISCOVERY:
 118       trace_reference_gc<T>("do_discovered_and_discovery", obj);
 119       oop_oop_iterate_discovered_and_discovery<T>(obj, reference_type(), closure, contains);
 120       break;
 121     case OopIterateClosure::DO_FIELDS:
 122       trace_reference_gc<T>("do_fields", obj);
 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);




  81   // Try to discover reference and return if it succeeds.
  82   if (try_discover<T>(obj, type, closure)) {
  83     return;
  84   }
  85 
  86   // Treat referent and discovered as normal oops.
  87   do_referent<T>(obj, closure, contains);
  88   do_discovered<T>(obj, closure, contains);
  89 }
  90 
  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>
 100 void InstanceRefKlass::oop_oop_iterate_fields(oop obj, OopClosureType* closure, Contains& contains) {
 101   assert(closure->ref_discoverer() == NULL, "ReferenceDiscoverer should not be set");
 102   do_referent<T>(obj, closure, contains);
 103   do_discovered<T>(obj, closure, contains);
 104 }
 105 
 106 template <typename T, class OopClosureType, class Contains>
 107 void InstanceRefKlass::oop_oop_iterate_fields_except_referent(oop obj, OopClosureType* closure, Contains& contains) {
 108   assert(closure->ref_discoverer() == NULL, "ReferenceDiscoverer should not be set");
 109   do_discovered<T>(obj, closure, contains);
 110 }
 111 
 112 template <typename T, class OopClosureType, class Contains>
 113 void InstanceRefKlass::oop_oop_iterate_ref_processing(oop obj, OopClosureType* closure, Contains& contains) {
 114   switch (closure->reference_iteration_mode()) {
 115     case OopIterateClosure::DO_DISCOVERY:
 116       trace_reference_gc<T>("do_discovery", obj);
 117       oop_oop_iterate_discovery<T>(obj, reference_type(), closure, contains);
 118       break;
 119     case OopIterateClosure::DO_DISCOVERED_AND_DISCOVERY:
 120       trace_reference_gc<T>("do_discovered_and_discovery", obj);
 121       oop_oop_iterate_discovered_and_discovery<T>(obj, reference_type(), closure, contains);
 122       break;
 123     case OopIterateClosure::DO_FIELDS:
 124       trace_reference_gc<T>("do_fields", obj);
 125       oop_oop_iterate_fields<T>(obj, closure, contains);
 126       break;
 127     case OopIterateClosure::DO_FIELDS_EXCEPT_REFERENT:
 128       trace_reference_gc<T>("do_fields_except_referent", obj);


< prev index next >