--- old/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/oops/Klass.java 2017-07-21 13:40:29.634503658 -0400 +++ new/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/oops/Klass.java 2017-07-21 13:40:29.407337749 -0400 @@ -27,6 +27,7 @@ import java.io.*; import java.util.*; import sun.jvm.hotspot.debugger.*; +import sun.jvm.hotspot.classfile.*; import sun.jvm.hotspot.runtime.*; import sun.jvm.hotspot.types.*; @@ -63,6 +64,7 @@ nextSibling = new MetadataField(type.getAddressField("_next_sibling"), 0); nextLink = new MetadataField(type.getAddressField("_next_link"), 0); vtableLen = new CIntField(type.getCIntegerField("_vtable_len"), 0); + classLoaderData = type.getAddressField("_class_loader_data"); LH_INSTANCE_SLOW_PATH_BIT = db.lookupIntConstant("Klass::_lh_instance_slow_path_bit").intValue(); LH_LOG2_ELEMENT_SIZE_SHIFT = db.lookupIntConstant("Klass::_lh_log2_element_size_shift").intValue(); @@ -96,6 +98,7 @@ private static MetadataField nextLink; private static sun.jvm.hotspot.types.Field traceIDField; private static CIntField vtableLen; + private static AddressField classLoaderData; private Address getValue(AddressField field) { return addr.getAddressAt(field.getOffset()); @@ -110,7 +113,7 @@ public Klass getSuper() { return (Klass) superField.getValue(this); } public Klass getJavaSuper() { return null; } public int getLayoutHelper() { return (int) layoutHelper.getValue(this); } - public Symbol getName() { return getSymbol(name); } + public Symbol getName() { return getSymbol(name); } public long getAccessFlags() { return accessFlags.getValue(this); } // Convenience routine public AccessFlags getAccessFlagsObj(){ return new AccessFlags(getAccessFlags()); } @@ -119,6 +122,9 @@ public Klass getNextLinkKlass() { return (Klass) nextLink.getValue(this); } public long getVtableLen() { return vtableLen.getValue(this); } + public ClassLoaderData getClassLoaderData() { return ClassLoaderData.instantiateWrapperFor(classLoaderData.getValue(getAddress())); } + public Oop getClassLoader() { return getClassLoaderData().getClassLoader(); } + public long traceID() { if (traceIDField == null) return 0; return traceIDField.getJLong(addr);