diff -r 55c43e677ded -r fb0275c320a0 src/hotspot/share/classfile/javaClasses.cpp --- a/src/hotspot/share/classfile/javaClasses.cpp Mon Nov 20 12:04:13 2017 +0100 +++ b/src/hotspot/share/classfile/javaClasses.cpp Mon Nov 20 13:07:44 2017 +0100 @@ -3064,6 +3064,25 @@ } } +// Support for java_lang_ref_Reference + +bool java_lang_ref_Reference::is_referent_field(oop obj, ptrdiff_t offset) { + assert(!oopDesc::is_null(obj), "sanity"); + if (offset != java_lang_ref_Reference::referent_offset) { + return false; + } + + Klass* k = obj->klass(); + if (!k->is_instance_klass()) { + return false; + } + + InstanceKlass* ik = InstanceKlass::cast(obj->klass()); + bool is_reference = ik->reference_type() != REF_NONE; + assert(!is_reference || ik->is_subclass_of(SystemDictionary::Reference_klass()), "sanity"); + return is_reference; +} + // Support for java_lang_ref_SoftReference jlong java_lang_ref_SoftReference::timestamp(oop ref) {