< prev index next >

src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/g1/HeapRegion.java

Print this page
rev 56812 : imported patch 8189737-stefanj-review

@@ -43,13 +43,15 @@
 
 // Mirror class for HeapRegion. Currently we don't actually include
 // any of its fields but only iterate over it.
 
 public class HeapRegion extends CompactibleSpace implements LiveRegionsProvider {
-    // static int GrainBytes;
-    static private CIntegerField grainBytesField;
+    private static AddressField bottomField;
     static private AddressField topField;
+    private static AddressField endField;
+
+    static private CIntegerField grainBytesField;
     private static long typeFieldOffset;
     private static long pointerSize;
 
     private HeapRegionType type;
 

@@ -62,12 +64,15 @@
     }
 
     static private synchronized void initialize(TypeDataBase db) {
         Type type = db.lookupType("HeapRegion");
 
-        grainBytesField = type.getCIntegerField("GrainBytes");
+        bottomField = type.getAddressField("_bottom");
         topField = type.getAddressField("_top");
+        endField = type.getAddressField("_end");
+
+        grainBytesField = type.getCIntegerField("GrainBytes");
         typeFieldOffset = type.getField("_type").getOffset();
 
         pointerSize = db.lookupType("HeapRegion*").getSize();
     }
 

@@ -80,27 +85,31 @@
         Address typeAddr = (addr instanceof OopHandle) ? addr.addOffsetToAsOopHandle(typeFieldOffset)
                                                        : addr.addOffsetTo(typeFieldOffset);
         type = (HeapRegionType)VMObjectFactory.newObject(HeapRegionType.class, typeAddr);
     }
 
-    public Address top() {
-        return topField.getValue(addr);
-    }
+    public Address bottom()        { return bottomField.getValue(addr); }
+    public Address top()           { return topField.getValue(addr); }
+    public Address end()           { return endField.getValue(addr); }
 
     @Override
     public List<MemRegion> getLiveRegions() {
         List<MemRegion> res = new ArrayList<>();
         res.add(new MemRegion(bottom(), top()));
         return res;
     }
 
-    @Override
+    /** Returns a subregion of the space containing all the objects in
+        the space. */
+    public MemRegion usedRegion() {
+        return new MemRegion(bottom(), end());
+    }
+
     public long used() {
         return top().minus(bottom());
     }
 
-    @Override
     public long free() {
         return end().minus(top());
     }
 
     public boolean isFree() {
< prev index next >