--- old/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/z/ZAddressRangeMapForPageTable.java 2019-02-13 16:35:02.454271353 +0100 +++ new/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/z/ZAddressRangeMapForPageTable.java 2019-02-13 16:35:02.078271366 +0100 @@ -54,15 +54,38 @@ return mapField.getValue(addr); } + public long size() { + return ZGlobals.ZAddressOffsetMax >> AddressRangeShift; + } + private long index_for_addr(Address addr) { long index = ZAddress.offset(addr) >> AddressRangeShift; return index; } + Address at(long index) { + return map().getAddressAt(index * VM.getVM().getBytesPerLong()); + } + Address get(Address addr) { long index = index_for_addr(addr); + return at(index); + } - return map().getAddressAt(index * VM.getVM().getBytesPerLong()); + public class Iterator { + private long next = 0; + + boolean hasNext() { + return next < size(); + } + + Address next() { + if (next >= size()) { + throw new RuntimeException("OOIBE"); + } + + return at(next++); + } } }