< prev index next >

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

Print this page

        

@@ -65,10 +65,17 @@
   }
   // treat next as normal oop
   if (contains(next_addr)) {
     Devirtualizer<nv>::do_oop(closure, next_addr);
   }
+  // treat value as normal oop if Ephemeron
+  if (reference_type() == REF_EPHEMERON) {
+    T* value_addr = (T*)java_lang_ref_Ephemeron::value_addr(obj);
+    if (contains(value_addr)) {
+      Devirtualizer<nv>::do_oop(closure, value_addr);
+    }
+  }
 }
 
 class AlwaysContains {
  public:
   template <typename T> bool operator()(T* p) const { return true; }
< prev index next >