--- old/agent/src/share/classes/sun/jvm/hotspot/memory/Universe.java 2012-10-08 20:35:19.732375792 +0200 +++ new/agent/src/share/classes/sun/jvm/hotspot/memory/Universe.java 2012-10-08 20:35:19.539955688 +0200 @@ -53,6 +53,8 @@ private static AddressField narrowOopBaseField; private static CIntegerField narrowOopShiftField; + private static AddressField narrowKlassBaseField; + private static CIntegerField narrowKlassShiftField; static { VM.registerVMInitializedObserver(new Observer() { @@ -86,6 +88,8 @@ narrowOopBaseField = type.getAddressField("_narrow_oop._base"); narrowOopShiftField = type.getCIntegerField("_narrow_oop._shift"); + narrowKlassBaseField = type.getAddressField("_narrow_klass._base"); + narrowKlassShiftField = type.getCIntegerField("_narrow_klass._shift"); } public Universe() { @@ -111,6 +115,19 @@ return (int)narrowOopShiftField.getValue(); } + public static long getNarrowKlassBase() { + if (narrowKlassBaseField.getValue() == null) { + return 0; + } else { + return narrowKlassBaseField.getValue().minus(null); + } + } + + public static int getNarrowKlassShift() { + return (int)narrowKlassShiftField.getValue(); + } + + /** Returns "TRUE" iff "p" points into the allocated area of the heap. */ public boolean isIn(Address p) { return heap().isIn(p);