26
27 import java.util.Iterator;
28 import java.util.Observable;
29 import java.util.Observer;
30
31 import sun.jvm.hotspot.debugger.Address;
32 import sun.jvm.hotspot.gc_interface.CollectedHeapName;
33 import sun.jvm.hotspot.memory.MemRegion;
34 import sun.jvm.hotspot.memory.SharedHeap;
35 import sun.jvm.hotspot.memory.SpaceClosure;
36 import sun.jvm.hotspot.runtime.VM;
37 import sun.jvm.hotspot.runtime.VMObjectFactory;
38 import sun.jvm.hotspot.types.AddressField;
39 import sun.jvm.hotspot.types.CIntegerField;
40 import sun.jvm.hotspot.types.Type;
41 import sun.jvm.hotspot.types.TypeDataBase;
42
43 // Mirror class for G1CollectedHeap.
44
45 public class G1CollectedHeap extends SharedHeap {
46 // HeapRegionSeq _seq;
47 static private long hrsFieldOffset;
48 // MemRegion _g1_reserved;
49 static private long g1ReservedFieldOffset;
50 // size_t _summary_bytes_used;
51 static private CIntegerField summaryBytesUsedField;
52 // G1MonitoringSupport* _g1mm;
53 static private AddressField g1mmField;
54 // HeapRegionSet _old_set;
55 static private long oldSetFieldOffset;
56 // HeapRegionSet _humongous_set;
57 static private long humongousSetFieldOffset;
58
59 static {
60 VM.registerVMInitializedObserver(new Observer() {
61 public void update(Observable o, Object data) {
62 initialize(VM.getVM().getTypeDataBase());
63 }
64 });
65 }
66
67 static private synchronized void initialize(TypeDataBase db) {
68 Type type = db.lookupType("G1CollectedHeap");
69
70 hrsFieldOffset = type.getField("_hrs").getOffset();
71 summaryBytesUsedField = type.getCIntegerField("_summary_bytes_used");
72 g1mmField = type.getAddressField("_g1mm");
73 oldSetFieldOffset = type.getField("_old_set").getOffset();
74 humongousSetFieldOffset = type.getField("_humongous_set").getOffset();
75 }
76
77 public long capacity() {
78 return hrs().capacity();
79 }
80
81 public long used() {
82 return summaryBytesUsedField.getValue(addr);
83 }
84
85 public long n_regions() {
86 return hrs().length();
87 }
88
89 private HeapRegionSeq hrs() {
90 Address hrsAddr = addr.addOffsetTo(hrsFieldOffset);
91 return (HeapRegionSeq) VMObjectFactory.newObject(HeapRegionSeq.class,
92 hrsAddr);
93 }
94
95 public G1MonitoringSupport g1mm() {
96 Address g1mmAddr = g1mmField.getValue(addr);
97 return (G1MonitoringSupport) VMObjectFactory.newObject(G1MonitoringSupport.class, g1mmAddr);
98 }
99
100 public HeapRegionSetBase oldSet() {
101 Address oldSetAddr = addr.addOffsetTo(oldSetFieldOffset);
102 return (HeapRegionSetBase) VMObjectFactory.newObject(HeapRegionSetBase.class,
103 oldSetAddr);
104 }
105
106 public HeapRegionSetBase humongousSet() {
107 Address humongousSetAddr = addr.addOffsetTo(humongousSetFieldOffset);
108 return (HeapRegionSetBase) VMObjectFactory.newObject(HeapRegionSetBase.class,
109 humongousSetAddr);
110 }
111
112 private Iterator<HeapRegion> heapRegionIterator() {
113 return hrs().heapRegionIterator();
114 }
115
116 public void heapRegionIterate(SpaceClosure scl) {
117 Iterator<HeapRegion> iter = heapRegionIterator();
118 while (iter.hasNext()) {
119 HeapRegion hr = iter.next();
120 scl.doSpace(hr);
121 }
122 }
123
124 public CollectedHeapName kind() {
125 return CollectedHeapName.G1_COLLECTED_HEAP;
126 }
127
128 public G1CollectedHeap(Address addr) {
129 super(addr);
130 }
131 }
|
26
27 import java.util.Iterator;
28 import java.util.Observable;
29 import java.util.Observer;
30
31 import sun.jvm.hotspot.debugger.Address;
32 import sun.jvm.hotspot.gc_interface.CollectedHeapName;
33 import sun.jvm.hotspot.memory.MemRegion;
34 import sun.jvm.hotspot.memory.SharedHeap;
35 import sun.jvm.hotspot.memory.SpaceClosure;
36 import sun.jvm.hotspot.runtime.VM;
37 import sun.jvm.hotspot.runtime.VMObjectFactory;
38 import sun.jvm.hotspot.types.AddressField;
39 import sun.jvm.hotspot.types.CIntegerField;
40 import sun.jvm.hotspot.types.Type;
41 import sun.jvm.hotspot.types.TypeDataBase;
42
43 // Mirror class for G1CollectedHeap.
44
45 public class G1CollectedHeap extends SharedHeap {
46 // HeapRegionManager _hrm;
47 static private long hrmFieldOffset;
48 // MemRegion _g1_reserved;
49 static private long g1ReservedFieldOffset;
50 // size_t _summary_bytes_used;
51 static private CIntegerField summaryBytesUsedField;
52 // G1MonitoringSupport* _g1mm;
53 static private AddressField g1mmField;
54 // HeapRegionSet _old_set;
55 static private long oldSetFieldOffset;
56 // HeapRegionSet _humongous_set;
57 static private long humongousSetFieldOffset;
58
59 static {
60 VM.registerVMInitializedObserver(new Observer() {
61 public void update(Observable o, Object data) {
62 initialize(VM.getVM().getTypeDataBase());
63 }
64 });
65 }
66
67 static private synchronized void initialize(TypeDataBase db) {
68 Type type = db.lookupType("G1CollectedHeap");
69
70 hrmFieldOffset = type.getField("_hrm").getOffset();
71 summaryBytesUsedField = type.getCIntegerField("_summary_bytes_used");
72 g1mmField = type.getAddressField("_g1mm");
73 oldSetFieldOffset = type.getField("_old_set").getOffset();
74 humongousSetFieldOffset = type.getField("_humongous_set").getOffset();
75 }
76
77 public long capacity() {
78 return hrm().capacity();
79 }
80
81 public long used() {
82 return summaryBytesUsedField.getValue(addr);
83 }
84
85 public long n_regions() {
86 return hrm().length();
87 }
88
89 private HeapRegionManager hrm() {
90 Address hrmAddr = addr.addOffsetTo(hrmFieldOffset);
91 return (HeapRegionManager) VMObjectFactory.newObject(HeapRegionManager.class,
92 hrmAddr);
93 }
94
95 public G1MonitoringSupport g1mm() {
96 Address g1mmAddr = g1mmField.getValue(addr);
97 return (G1MonitoringSupport) VMObjectFactory.newObject(G1MonitoringSupport.class, g1mmAddr);
98 }
99
100 public HeapRegionSetBase oldSet() {
101 Address oldSetAddr = addr.addOffsetTo(oldSetFieldOffset);
102 return (HeapRegionSetBase) VMObjectFactory.newObject(HeapRegionSetBase.class,
103 oldSetAddr);
104 }
105
106 public HeapRegionSetBase humongousSet() {
107 Address humongousSetAddr = addr.addOffsetTo(humongousSetFieldOffset);
108 return (HeapRegionSetBase) VMObjectFactory.newObject(HeapRegionSetBase.class,
109 humongousSetAddr);
110 }
111
112 private Iterator<HeapRegion> heapRegionIterator() {
113 return hrm().heapRegionIterator();
114 }
115
116 public void heapRegionIterate(SpaceClosure scl) {
117 Iterator<HeapRegion> iter = heapRegionIterator();
118 while (iter.hasNext()) {
119 HeapRegion hr = iter.next();
120 scl.doSpace(hr);
121 }
122 }
123
124 public CollectedHeapName kind() {
125 return CollectedHeapName.G1_COLLECTED_HEAP;
126 }
127
128 public G1CollectedHeap(Address addr) {
129 super(addr);
130 }
131 }
|