src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/z/ZPageTable.java
author stefank
Tue, 19 Feb 2019 10:04:28 +0100
changeset 53815 46ce458df412
parent 50525 767cdb97f103
child 54095 8b4a1177202d
permissions -rw-r--r--
8218922: SA: Enable best-effort implementation of live regions iteration for ZGC Reviewed-by: eosterlund, ysuenaga
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
50525
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
     1
/*
53815
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
     2
 * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved.
50525
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
     4
 *
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
     7
 * published by the Free Software Foundation.
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
     8
 *
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    13
 * accompanied this code).
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    14
 *
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    18
 *
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    21
 * questions.
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    22
 *
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    23
 */
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    24
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    25
package sun.jvm.hotspot.gc.z;
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    26
53815
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
    27
import java.util.Iterator;
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
    28
50525
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    29
import sun.jvm.hotspot.debugger.Address;
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    30
import sun.jvm.hotspot.runtime.VM;
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    31
import sun.jvm.hotspot.runtime.VMObject;
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    32
import sun.jvm.hotspot.runtime.VMObjectFactory;
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    33
import sun.jvm.hotspot.types.Type;
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    34
import sun.jvm.hotspot.types.TypeDataBase;
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    35
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    36
public class ZPageTable extends VMObject {
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    37
    private static long mapFieldOffset;
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    38
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    39
    static {
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    40
        VM.registerVMInitializedObserver((o, d) -> initialize(VM.getVM().getTypeDataBase()));
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    41
    }
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    42
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    43
    static private synchronized void initialize(TypeDataBase db) {
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    44
        Type type = db.lookupType("ZPageTable");
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    45
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    46
        mapFieldOffset = type.getAddressField("_map").getOffset();
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    47
    }
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    48
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    49
    public ZPageTable(Address addr) {
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    50
        super(addr);
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    51
    }
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    52
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    53
    private ZAddressRangeMapForPageTable map() {
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    54
        return (ZAddressRangeMapForPageTable)VMObjectFactory.newObject(ZAddressRangeMapForPageTable.class, addr.addOffsetTo(mapFieldOffset));
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    55
    }
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    56
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    57
    private ZPageTableEntry getEntry(Address o) {
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    58
        return new ZPageTableEntry(map().get(o));
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    59
    }
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    60
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    61
    ZPage get(Address o) {
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    62
        return getEntry(o).page();
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    63
    }
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    64
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    65
    boolean is_relocating(Address o) {
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    66
        return getEntry(o).relocating();
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
    67
    }
53815
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
    68
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
    69
    private class ZPagesIterator implements Iterator<ZPage> {
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
    70
        private ZAddressRangeMapForPageTable.Iterator mapIter;
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
    71
        private ZPage next;
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
    72
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
    73
        ZPagesIterator() {
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
    74
            mapIter = map().new Iterator();
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
    75
            positionToNext();
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
    76
        }
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
    77
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
    78
        private ZPage positionToNext() {
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
    79
            ZPage current = next;
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
    80
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
    81
            // Find next
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
    82
            ZPage found = null;
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
    83
            while (mapIter.hasNext()) {
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
    84
                ZPageTableEntry entry = new ZPageTableEntry(mapIter.next());
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
    85
                if (!entry.isEmpty()) {
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
    86
                    ZPage page = entry.page();
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
    87
                    // Medium pages have repeated entries for all covered slots,
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
    88
                    // therefore we need to compare against the current page.
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
    89
                    if (page != null && !page.equals(current)) {
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
    90
                        found = page;
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
    91
                        break;
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
    92
                    }
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
    93
                }
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
    94
            }
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
    95
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
    96
            next = found;
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
    97
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
    98
            return current;
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
    99
        }
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   100
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   101
        @Override
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   102
        public boolean hasNext() {
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   103
            return next != null;
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   104
        }
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   105
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   106
        @Override
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   107
        public ZPage next() {
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   108
            return positionToNext();
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   109
        }
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   110
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   111
        @Override
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   112
        public void remove() {
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   113
            /* not supported */
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   114
        }
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   115
    }
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   116
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   117
    abstract class ZPageFilter {
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   118
        public abstract boolean accept(ZPage page);
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   119
    }
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   120
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   121
    class ZPagesFilteredIterator implements Iterator<ZPage> {
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   122
        private ZPage next;
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   123
        private ZPagesIterator iter = new ZPagesIterator();
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   124
        private ZPageFilter filter;
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   125
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   126
        ZPagesFilteredIterator(ZPageFilter filter) {
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   127
            this.filter = filter;
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   128
            positionToNext();
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   129
        }
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   130
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   131
        public ZPage positionToNext() {
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   132
            ZPage current = next;
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   133
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   134
            // Find next
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   135
            ZPage found = null;
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   136
            while (iter.hasNext()) {
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   137
                ZPage page = iter.next();
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   138
                if (filter.accept(page)) {
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   139
                    found = page;
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   140
                    break;
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   141
                }
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   142
            }
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   143
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   144
            next = found;
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   145
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   146
            return current;
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   147
        }
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   148
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   149
        @Override
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   150
        public boolean hasNext() {
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   151
            return next != null;
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   152
        }
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   153
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   154
        @Override
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   155
        public ZPage next() {
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   156
            return positionToNext();
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   157
        }
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   158
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   159
        @Override
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   160
        public void remove() {
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   161
            /* not supported */
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   162
        }
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   163
    }
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   164
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   165
    public Iterator<ZPage> iterator() {
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   166
        return new ZPagesIterator();
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   167
    }
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   168
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   169
    public Iterator<ZPage> activePagesIterator() {
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   170
        return new ZPagesFilteredIterator(new ZPageFilter() {
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   171
            public boolean accept(ZPage page) {
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   172
                return page.is_active();
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   173
            }
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   174
        });
46ce458df412 8218922: SA: Enable best-effort implementation of live regions iteration for ZGC
stefank
parents: 50525
diff changeset
   175
    }
50525
767cdb97f103 8204210: Implementation: JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
pliden
parents:
diff changeset
   176
}