< 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 >