--- old/agent/src/share/classes/sun/jvm/hotspot/memory/GenCollectedHeap.java 2014-10-17 15:34:48.000000000 +0200 +++ new/agent/src/share/classes/sun/jvm/hotspot/memory/GenCollectedHeap.java 2014-10-17 15:34:48.000000000 +0200 @@ -37,7 +37,9 @@ private static CIntegerField nGensField; private static AddressField youngGenField; private static AddressField oldGenField; - private static AddressField genSpecsField; + + private static AddressField youngGenSpecField; + private static AddressField oldGenSpecField; private static GenerationFactory genFactory; @@ -55,9 +57,12 @@ nGensField = type.getCIntegerField("_n_gens"); youngGenField = type.getAddressField("_young_gen"); oldGenField = type.getAddressField("_old_gen"); - genSpecsField = type.getAddressField("_gen_specs"); genFactory = new GenerationFactory(); + + Type colPolType = db.lookupType("GenCollectorPolicy"); + youngGenSpecField = colPolType.getAddressField("_young_gen_spec"); + oldGenSpecField = colPolType.getAddressField("_old_gen_spec"); } public GenCollectedHeap(Address addr) { @@ -123,13 +128,15 @@ return null; } - Address ptrList = genSpecsField.getValue(addr); - if (ptrList == null) { - return null; + if (level == 0) { + return (GenerationSpec) + VMObjectFactory.newObject(GenerationSpec.class, + youngGenSpecField.getAddress()); + } else { + return (GenerationSpec) + VMObjectFactory.newObject(GenerationSpec.class, + oldGenSpecField.getAddress()); } - return (GenerationSpec) - VMObjectFactory.newObject(GenerationSpec.class, - ptrList.getAddressAt(level * VM.getVM().getAddressSize())); } public CollectedHeapName kind() {