30 import java.util.Observer;
31
32 import sun.jvm.hotspot.debugger.Address;
33 import sun.jvm.hotspot.gc.shared.CollectedHeap;
34 import sun.jvm.hotspot.gc.shared.CollectedHeapName;
35 import sun.jvm.hotspot.gc.shared.SpaceClosure;
36 import sun.jvm.hotspot.gc.shared.PrintRegionClosure;
37 import sun.jvm.hotspot.memory.MemRegion;
38 import sun.jvm.hotspot.runtime.VM;
39 import sun.jvm.hotspot.runtime.VMObjectFactory;
40 import sun.jvm.hotspot.types.AddressField;
41 import sun.jvm.hotspot.types.CIntegerField;
42 import sun.jvm.hotspot.types.Type;
43 import sun.jvm.hotspot.types.TypeDataBase;
44 import sun.jvm.hotspot.tools.HeapSummary;
45
46 // Mirror class for G1CollectedHeap.
47
48 public class G1CollectedHeap extends CollectedHeap {
49 // HeapRegionManager _hrm;
50 static private long hrmFieldOffset;
51 // MemRegion _g1_reserved;
52 static private long g1ReservedFieldOffset;
53 // size_t _summary_bytes_used;
54 static private CIntegerField summaryBytesUsedField;
55 // G1MonitoringSupport* _g1mm;
56 static private AddressField g1mmField;
57 // HeapRegionSet _old_set;
58 static private long oldSetFieldOffset;
59 // HeapRegionSet _archive_set;
60 static private long archiveSetFieldOffset;
61 // HeapRegionSet _humongous_set;
62 static private long humongousSetFieldOffset;
63
64 static {
65 VM.registerVMInitializedObserver(new Observer() {
66 public void update(Observable o, Object data) {
67 initialize(VM.getVM().getTypeDataBase());
68 }
69 });
70 }
71
72 static private synchronized void initialize(TypeDataBase db) {
73 Type type = db.lookupType("G1CollectedHeap");
74
75 hrmFieldOffset = type.getField("_hrm").getOffset();
76 summaryBytesUsedField = type.getCIntegerField("_summary_bytes_used");
77 g1mmField = type.getAddressField("_g1mm");
78 oldSetFieldOffset = type.getField("_old_set").getOffset();
79 archiveSetFieldOffset = type.getField("_archive_set").getOffset();
80 humongousSetFieldOffset = type.getField("_humongous_set").getOffset();
81 }
82
83 public long capacity() {
84 return hrm().capacity();
85 }
86
87 public long used() {
88 return summaryBytesUsedField.getValue(addr);
89 }
90
91 public long n_regions() {
92 return hrm().length();
93 }
94
95 public HeapRegionManager hrm() {
96 Address hrmAddr = addr.addOffsetTo(hrmFieldOffset);
97 return (HeapRegionManager) VMObjectFactory.newObject(HeapRegionManager.class,
98 hrmAddr);
99 }
100
101 public G1MonitoringSupport g1mm() {
102 Address g1mmAddr = g1mmField.getValue(addr);
103 return (G1MonitoringSupport) VMObjectFactory.newObject(G1MonitoringSupport.class, g1mmAddr);
104 }
105
106 public HeapRegionSetBase oldSet() {
107 Address oldSetAddr = addr.addOffsetTo(oldSetFieldOffset);
108 return (HeapRegionSetBase) VMObjectFactory.newObject(HeapRegionSetBase.class,
109 oldSetAddr);
110 }
111
112 public HeapRegionSetBase archiveSet() {
113 Address archiveSetAddr = addr.addOffsetTo(archiveSetFieldOffset);
114 return (HeapRegionSetBase) VMObjectFactory.newObject(HeapRegionSetBase.class,
115 archiveSetAddr);
116 }
|
30 import java.util.Observer;
31
32 import sun.jvm.hotspot.debugger.Address;
33 import sun.jvm.hotspot.gc.shared.CollectedHeap;
34 import sun.jvm.hotspot.gc.shared.CollectedHeapName;
35 import sun.jvm.hotspot.gc.shared.SpaceClosure;
36 import sun.jvm.hotspot.gc.shared.PrintRegionClosure;
37 import sun.jvm.hotspot.memory.MemRegion;
38 import sun.jvm.hotspot.runtime.VM;
39 import sun.jvm.hotspot.runtime.VMObjectFactory;
40 import sun.jvm.hotspot.types.AddressField;
41 import sun.jvm.hotspot.types.CIntegerField;
42 import sun.jvm.hotspot.types.Type;
43 import sun.jvm.hotspot.types.TypeDataBase;
44 import sun.jvm.hotspot.tools.HeapSummary;
45
46 // Mirror class for G1CollectedHeap.
47
48 public class G1CollectedHeap extends CollectedHeap {
49 // HeapRegionManager _hrm;
50 static private AddressField hrmField;
51 // MemRegion _g1_reserved;
52 static private long g1ReservedFieldOffset;
53 // size_t _summary_bytes_used;
54 static private CIntegerField summaryBytesUsedField;
55 // G1MonitoringSupport* _g1mm;
56 static private AddressField g1mmField;
57 // HeapRegionSet _old_set;
58 static private long oldSetFieldOffset;
59 // HeapRegionSet _archive_set;
60 static private long archiveSetFieldOffset;
61 // HeapRegionSet _humongous_set;
62 static private long humongousSetFieldOffset;
63
64 static {
65 VM.registerVMInitializedObserver(new Observer() {
66 public void update(Observable o, Object data) {
67 initialize(VM.getVM().getTypeDataBase());
68 }
69 });
70 }
71
72 static private synchronized void initialize(TypeDataBase db) {
73 Type type = db.lookupType("G1CollectedHeap");
74
75 hrmField = type.getAddressField("_hrm");
76 summaryBytesUsedField = type.getCIntegerField("_summary_bytes_used");
77 g1mmField = type.getAddressField("_g1mm");
78 oldSetFieldOffset = type.getField("_old_set").getOffset();
79 archiveSetFieldOffset = type.getField("_archive_set").getOffset();
80 humongousSetFieldOffset = type.getField("_humongous_set").getOffset();
81 }
82
83 public long capacity() {
84 return hrm().capacity();
85 }
86
87 public long used() {
88 return summaryBytesUsedField.getValue(addr);
89 }
90
91 public long n_regions() {
92 return hrm().length();
93 }
94
95 public HeapRegionManager hrm() {
96 Address hrmAddr = hrmField.getValue(addr);
97 return (HeapRegionManager) VMObjectFactory.newObject(HeapRegionManager.class,
98 hrmAddr);
99 }
100
101 public G1MonitoringSupport g1mm() {
102 Address g1mmAddr = g1mmField.getValue(addr);
103 return (G1MonitoringSupport) VMObjectFactory.newObject(G1MonitoringSupport.class, g1mmAddr);
104 }
105
106 public HeapRegionSetBase oldSet() {
107 Address oldSetAddr = addr.addOffsetTo(oldSetFieldOffset);
108 return (HeapRegionSetBase) VMObjectFactory.newObject(HeapRegionSetBase.class,
109 oldSetAddr);
110 }
111
112 public HeapRegionSetBase archiveSet() {
113 Address archiveSetAddr = addr.addOffsetTo(archiveSetFieldOffset);
114 return (HeapRegionSetBase) VMObjectFactory.newObject(HeapRegionSetBase.class,
115 archiveSetAddr);
116 }
|