comparison agent/src/share/classes/sun/jvm/hotspot/gc_implementation/g1/G1CollectedHeap.java @ 3984:81aa07130d30

7097048: G1: extend the G1 SA changes to print per-heap space information Reviewed-by: brutisso, johnc
author tonyp
date Mon, 03 Oct 2011 19:04:14 -0400
parents 4f93f0d00802
children 0b3d1ec6eaee
comparison
equal deleted inserted replaced
3983:811ec3d0833b 3984:81aa07130d30
33 import sun.jvm.hotspot.memory.MemRegion; 33 import sun.jvm.hotspot.memory.MemRegion;
34 import sun.jvm.hotspot.memory.SharedHeap; 34 import sun.jvm.hotspot.memory.SharedHeap;
35 import sun.jvm.hotspot.memory.SpaceClosure; 35 import sun.jvm.hotspot.memory.SpaceClosure;
36 import sun.jvm.hotspot.runtime.VM; 36 import sun.jvm.hotspot.runtime.VM;
37 import sun.jvm.hotspot.runtime.VMObjectFactory; 37 import sun.jvm.hotspot.runtime.VMObjectFactory;
38 import sun.jvm.hotspot.types.AddressField;
38 import sun.jvm.hotspot.types.CIntegerField; 39 import sun.jvm.hotspot.types.CIntegerField;
39 import sun.jvm.hotspot.types.Type; 40 import sun.jvm.hotspot.types.Type;
40 import sun.jvm.hotspot.types.TypeDataBase; 41 import sun.jvm.hotspot.types.TypeDataBase;
41 42
42 // Mirror class for G1CollectedHeap. 43 // Mirror class for G1CollectedHeap.
46 static private long hrsFieldOffset; 47 static private long hrsFieldOffset;
47 // MemRegion _g1_committed; 48 // MemRegion _g1_committed;
48 static private long g1CommittedFieldOffset; 49 static private long g1CommittedFieldOffset;
49 // size_t _summary_bytes_used; 50 // size_t _summary_bytes_used;
50 static private CIntegerField summaryBytesUsedField; 51 static private CIntegerField summaryBytesUsedField;
52 // G1MonitoringSupport* _g1mm
53 static private AddressField g1mmField;
51 54
52 static { 55 static {
53 VM.registerVMInitializedObserver(new Observer() { 56 VM.registerVMInitializedObserver(new Observer() {
54 public void update(Observable o, Object data) { 57 public void update(Observable o, Object data) {
55 initialize(VM.getVM().getTypeDataBase()); 58 initialize(VM.getVM().getTypeDataBase());
61 Type type = db.lookupType("G1CollectedHeap"); 64 Type type = db.lookupType("G1CollectedHeap");
62 65
63 hrsFieldOffset = type.getField("_hrs").getOffset(); 66 hrsFieldOffset = type.getField("_hrs").getOffset();
64 g1CommittedFieldOffset = type.getField("_g1_committed").getOffset(); 67 g1CommittedFieldOffset = type.getField("_g1_committed").getOffset();
65 summaryBytesUsedField = type.getCIntegerField("_summary_bytes_used"); 68 summaryBytesUsedField = type.getCIntegerField("_summary_bytes_used");
69 g1mmField = type.getAddressField("_g1mm");
66 } 70 }
67 71
68 public long capacity() { 72 public long capacity() {
69 Address g1CommittedAddr = addr.addOffsetTo(g1CommittedFieldOffset); 73 Address g1CommittedAddr = addr.addOffsetTo(g1CommittedFieldOffset);
70 MemRegion g1_committed = new MemRegion(g1CommittedAddr); 74 MemRegion g1_committed = new MemRegion(g1CommittedAddr);
83 Address hrsAddr = addr.addOffsetTo(hrsFieldOffset); 87 Address hrsAddr = addr.addOffsetTo(hrsFieldOffset);
84 return (HeapRegionSeq) VMObjectFactory.newObject(HeapRegionSeq.class, 88 return (HeapRegionSeq) VMObjectFactory.newObject(HeapRegionSeq.class,
85 hrsAddr); 89 hrsAddr);
86 } 90 }
87 91
92 public G1MonitoringSupport g1mm() {
93 Address g1mmAddr = g1mmField.getValue(addr);
94 return (G1MonitoringSupport) VMObjectFactory.newObject(G1MonitoringSupport.class, g1mmAddr);
95 }
96
88 private Iterator<HeapRegion> heapRegionIterator() { 97 private Iterator<HeapRegion> heapRegionIterator() {
89 return hrs().heapRegionIterator(); 98 return hrs().heapRegionIterator();
90 } 99 }
91 100
92 public void heapRegionIterate(SpaceClosure scl) { 101 public void heapRegionIterate(SpaceClosure scl) {