< prev index next >

src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/z/ZPageTable.java

Print this page

        

*** 22,31 **** --- 22,33 ---- * */ package sun.jvm.hotspot.gc.z; + import java.util.Iterator; + import sun.jvm.hotspot.debugger.Address; import sun.jvm.hotspot.runtime.VM; import sun.jvm.hotspot.runtime.VMObject; import sun.jvm.hotspot.runtime.VMObjectFactory; import sun.jvm.hotspot.types.Type;
*** 61,66 **** --- 63,176 ---- } boolean is_relocating(Address o) { return getEntry(o).relocating(); } + + private class ZPagesIterator implements Iterator<ZPage> { + private ZAddressRangeMapForPageTable.Iterator mapIter; + private ZPage next; + + ZPagesIterator() { + mapIter = map().new Iterator(); + positionToNext(); + } + + private ZPage positionToNext() { + ZPage current = next; + + // Find next + ZPage found = null; + while (mapIter.hasNext()) { + ZPageTableEntry entry = new ZPageTableEntry(mapIter.next()); + if (!entry.isEmpty()) { + ZPage page = entry.page(); + // Medium pages have repeated entries for all covered slots, + // therefore we need to compare against the current page. + if (page != null && !page.equals(current)) { + found = page; + break; + } + } + } + + next = found; + + return current; + } + + @Override + public boolean hasNext() { + return next != null; + } + + @Override + public ZPage next() { + return positionToNext(); + } + + @Override + public void remove() { + /* not supported */ + } + } + + abstract class ZPageFilter { + public abstract boolean accept(ZPage page); + } + + class ZPagesFilteredIterator implements Iterator<ZPage> { + private ZPage next; + private ZPagesIterator iter = new ZPagesIterator(); + private ZPageFilter filter; + + ZPagesFilteredIterator(ZPageFilter filter) { + this.filter = filter; + positionToNext(); + } + + public ZPage positionToNext() { + ZPage current = next; + + // Find next + ZPage found = null; + while (iter.hasNext()) { + ZPage page = iter.next(); + if (filter.accept(page)) { + found = page; + break; + } + } + + next = found; + + return current; + } + + @Override + public boolean hasNext() { + return next != null; + } + + @Override + public ZPage next() { + return positionToNext(); + } + + @Override + public void remove() { + /* not supported */ + } + } + + public Iterator<ZPage> iterator() { + return new ZPagesIterator(); + } + + public Iterator<ZPage> activePagesIterator() { + return new ZPagesFilteredIterator(new ZPageFilter() { + public boolean accept(ZPage page) { + return page.is_active(); + } + }); + } }
< prev index next >