agent/src/share/classes/sun/jvm/hotspot/gc_implementation/g1/HeapRegionSeq.java
Print this page
@@ -40,10 +40,12 @@
// Mirror class for HeapRegionSeq. It essentially encapsulates the G1HeapRegionTable.
public class HeapRegionSeq extends VMObject {
// G1HeapRegionTable _regions
static private long regionsFieldOffset;
+ // uint _allocated_lenght
+ static private CIntegerField allocatedLengthField;
static {
VM.registerVMInitializedObserver(new Observer() {
public void update(Observable o, Object data) {
initialize(VM.getVM().getTypeDataBase());
@@ -53,10 +55,11 @@
static private synchronized void initialize(TypeDataBase db) {
Type type = db.lookupType("HeapRegionSeq");
regionsFieldOffset = type.getField("_regions").getOffset();
+ allocatedLengthField = type.getCIntegerField("_allocated_length");
}
private G1HeapRegionTable regions() {
Address regionsAddr = addr.addOffsetTo(regionsFieldOffset);
return (G1HeapRegionTable) VMObjectFactory.newObject(G1HeapRegionTable.class,
@@ -65,12 +68,16 @@
public long length() {
return regions().length();
}
+ public long allocatedLength() {
+ return allocatedLengthField.getValue(addr);
+ }
+
public Iterator<HeapRegion> heapRegionIterator() {
- return regions().heapRegionIterator();
+ return regions().heapRegionIterator(allocatedLength());
}
public HeapRegionSeq(Address addr) {
super(addr);
}