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