hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_implementation/g1/G1CollectedHeap.java
author brutisso
Fri, 14 Mar 2014 10:15:46 +0100
changeset 23450 c7c6202fc7e2
parent 11577 0af7e6e062a7
child 26157 70eddb655686
permissions -rw-r--r--
8034079: G1: Refactor the HeapRegionSet hierarchy Reviewed-by: tschatzl, pliden
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
10663
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
     1
/*
11577
0af7e6e062a7 7097586: G1: improve the per-space output when using jmap -heap
tonyp
parents: 10675
diff changeset
     2
 * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
10663
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
     4
 *
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
     7
 * published by the Free Software Foundation.
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
     8
 *
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    13
 * accompanied this code).
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    14
 *
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    18
 *
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    21
 * questions.
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    22
 *
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    23
 */
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    24
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    25
package sun.jvm.hotspot.gc_implementation.g1;
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    26
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    27
import java.util.Iterator;
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    28
import java.util.Observable;
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    29
import java.util.Observer;
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    30
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    31
import sun.jvm.hotspot.debugger.Address;
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    32
import sun.jvm.hotspot.gc_interface.CollectedHeapName;
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    33
import sun.jvm.hotspot.memory.MemRegion;
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    34
import sun.jvm.hotspot.memory.SharedHeap;
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    35
import sun.jvm.hotspot.memory.SpaceClosure;
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    36
import sun.jvm.hotspot.runtime.VM;
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    37
import sun.jvm.hotspot.runtime.VMObjectFactory;
10675
8b887b2cb116 7097048: G1: extend the G1 SA changes to print per-heap space information
tonyp
parents: 10663
diff changeset
    38
import sun.jvm.hotspot.types.AddressField;
10663
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    39
import sun.jvm.hotspot.types.CIntegerField;
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    40
import sun.jvm.hotspot.types.Type;
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    41
import sun.jvm.hotspot.types.TypeDataBase;
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    42
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    43
// Mirror class for G1CollectedHeap.
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    44
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    45
public class G1CollectedHeap extends SharedHeap {
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    46
    // HeapRegionSeq _seq;
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    47
    static private long hrsFieldOffset;
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    48
    // MemRegion _g1_committed;
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    49
    static private long g1CommittedFieldOffset;
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    50
    // size_t _summary_bytes_used;
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    51
    static private CIntegerField summaryBytesUsedField;
11577
0af7e6e062a7 7097586: G1: improve the per-space output when using jmap -heap
tonyp
parents: 10675
diff changeset
    52
    // G1MonitoringSupport* _g1mm;
10675
8b887b2cb116 7097048: G1: extend the G1 SA changes to print per-heap space information
tonyp
parents: 10663
diff changeset
    53
    static private AddressField g1mmField;
23450
c7c6202fc7e2 8034079: G1: Refactor the HeapRegionSet hierarchy
brutisso
parents: 11577
diff changeset
    54
    // HeapRegionSet _old_set;
11577
0af7e6e062a7 7097586: G1: improve the per-space output when using jmap -heap
tonyp
parents: 10675
diff changeset
    55
    static private long oldSetFieldOffset;
23450
c7c6202fc7e2 8034079: G1: Refactor the HeapRegionSet hierarchy
brutisso
parents: 11577
diff changeset
    56
    // HeapRegionSet _humongous_set;
11577
0af7e6e062a7 7097586: G1: improve the per-space output when using jmap -heap
tonyp
parents: 10675
diff changeset
    57
    static private long humongousSetFieldOffset;
10663
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    58
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    59
    static {
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    60
        VM.registerVMInitializedObserver(new Observer() {
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    61
                public void update(Observable o, Object data) {
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    62
                    initialize(VM.getVM().getTypeDataBase());
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    63
                }
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    64
            });
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    65
    }
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    66
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    67
    static private synchronized void initialize(TypeDataBase db) {
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    68
        Type type = db.lookupType("G1CollectedHeap");
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    69
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    70
        hrsFieldOffset = type.getField("_hrs").getOffset();
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    71
        g1CommittedFieldOffset = type.getField("_g1_committed").getOffset();
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    72
        summaryBytesUsedField = type.getCIntegerField("_summary_bytes_used");
10675
8b887b2cb116 7097048: G1: extend the G1 SA changes to print per-heap space information
tonyp
parents: 10663
diff changeset
    73
        g1mmField = type.getAddressField("_g1mm");
11577
0af7e6e062a7 7097586: G1: improve the per-space output when using jmap -heap
tonyp
parents: 10675
diff changeset
    74
        oldSetFieldOffset = type.getField("_old_set").getOffset();
0af7e6e062a7 7097586: G1: improve the per-space output when using jmap -heap
tonyp
parents: 10675
diff changeset
    75
        humongousSetFieldOffset = type.getField("_humongous_set").getOffset();
10663
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    76
    }
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    77
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    78
    public long capacity() {
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    79
        Address g1CommittedAddr = addr.addOffsetTo(g1CommittedFieldOffset);
11577
0af7e6e062a7 7097586: G1: improve the per-space output when using jmap -heap
tonyp
parents: 10675
diff changeset
    80
        MemRegion g1Committed = new MemRegion(g1CommittedAddr);
0af7e6e062a7 7097586: G1: improve the per-space output when using jmap -heap
tonyp
parents: 10675
diff changeset
    81
        return g1Committed.byteSize();
10663
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    82
    }
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    83
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    84
    public long used() {
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    85
        return summaryBytesUsedField.getValue(addr);
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    86
    }
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    87
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    88
    public long n_regions() {
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    89
        return hrs().length();
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    90
    }
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    91
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    92
    private HeapRegionSeq hrs() {
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    93
        Address hrsAddr = addr.addOffsetTo(hrsFieldOffset);
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    94
        return (HeapRegionSeq) VMObjectFactory.newObject(HeapRegionSeq.class,
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    95
                                                         hrsAddr);
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    96
    }
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
    97
10675
8b887b2cb116 7097048: G1: extend the G1 SA changes to print per-heap space information
tonyp
parents: 10663
diff changeset
    98
    public G1MonitoringSupport g1mm() {
8b887b2cb116 7097048: G1: extend the G1 SA changes to print per-heap space information
tonyp
parents: 10663
diff changeset
    99
        Address g1mmAddr = g1mmField.getValue(addr);
8b887b2cb116 7097048: G1: extend the G1 SA changes to print per-heap space information
tonyp
parents: 10663
diff changeset
   100
        return (G1MonitoringSupport) VMObjectFactory.newObject(G1MonitoringSupport.class, g1mmAddr);
8b887b2cb116 7097048: G1: extend the G1 SA changes to print per-heap space information
tonyp
parents: 10663
diff changeset
   101
    }
8b887b2cb116 7097048: G1: extend the G1 SA changes to print per-heap space information
tonyp
parents: 10663
diff changeset
   102
11577
0af7e6e062a7 7097586: G1: improve the per-space output when using jmap -heap
tonyp
parents: 10675
diff changeset
   103
    public HeapRegionSetBase oldSet() {
0af7e6e062a7 7097586: G1: improve the per-space output when using jmap -heap
tonyp
parents: 10675
diff changeset
   104
        Address oldSetAddr = addr.addOffsetTo(oldSetFieldOffset);
0af7e6e062a7 7097586: G1: improve the per-space output when using jmap -heap
tonyp
parents: 10675
diff changeset
   105
        return (HeapRegionSetBase) VMObjectFactory.newObject(HeapRegionSetBase.class,
0af7e6e062a7 7097586: G1: improve the per-space output when using jmap -heap
tonyp
parents: 10675
diff changeset
   106
                                                             oldSetAddr);
0af7e6e062a7 7097586: G1: improve the per-space output when using jmap -heap
tonyp
parents: 10675
diff changeset
   107
    }
0af7e6e062a7 7097586: G1: improve the per-space output when using jmap -heap
tonyp
parents: 10675
diff changeset
   108
0af7e6e062a7 7097586: G1: improve the per-space output when using jmap -heap
tonyp
parents: 10675
diff changeset
   109
    public HeapRegionSetBase humongousSet() {
0af7e6e062a7 7097586: G1: improve the per-space output when using jmap -heap
tonyp
parents: 10675
diff changeset
   110
        Address humongousSetAddr = addr.addOffsetTo(humongousSetFieldOffset);
0af7e6e062a7 7097586: G1: improve the per-space output when using jmap -heap
tonyp
parents: 10675
diff changeset
   111
        return (HeapRegionSetBase) VMObjectFactory.newObject(HeapRegionSetBase.class,
0af7e6e062a7 7097586: G1: improve the per-space output when using jmap -heap
tonyp
parents: 10675
diff changeset
   112
                                                             humongousSetAddr);
0af7e6e062a7 7097586: G1: improve the per-space output when using jmap -heap
tonyp
parents: 10675
diff changeset
   113
    }
0af7e6e062a7 7097586: G1: improve the per-space output when using jmap -heap
tonyp
parents: 10675
diff changeset
   114
10663
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
   115
    private Iterator<HeapRegion> heapRegionIterator() {
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
   116
        return hrs().heapRegionIterator();
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
   117
    }
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
   118
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
   119
    public void heapRegionIterate(SpaceClosure scl) {
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
   120
        Iterator<HeapRegion> iter = heapRegionIterator();
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
   121
        while (iter.hasNext()) {
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
   122
            HeapRegion hr = iter.next();
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
   123
            scl.doSpace(hr);
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
   124
        }
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
   125
    }
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
   126
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
   127
    public CollectedHeapName kind() {
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
   128
        return CollectedHeapName.G1_COLLECTED_HEAP;
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
   129
    }
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
   130
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
   131
    public G1CollectedHeap(Address addr) {
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
   132
        super(addr);
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
   133
    }
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents:
diff changeset
   134
}