36
37
38 public class Universe {
39 private static AddressField collectedHeapField;
40 private static VirtualConstructor heapConstructor;
41 private static sun.jvm.hotspot.types.OopField mainThreadGroupField;
42 private static sun.jvm.hotspot.types.OopField systemThreadGroupField;
43
44 // single dimensional primitive array klasses
45 private static sun.jvm.hotspot.types.AddressField boolArrayKlassField;
46 private static sun.jvm.hotspot.types.AddressField byteArrayKlassField;
47 private static sun.jvm.hotspot.types.AddressField charArrayKlassField;
48 private static sun.jvm.hotspot.types.AddressField intArrayKlassField;
49 private static sun.jvm.hotspot.types.AddressField shortArrayKlassField;
50 private static sun.jvm.hotspot.types.AddressField longArrayKlassField;
51 private static sun.jvm.hotspot.types.AddressField singleArrayKlassField;
52 private static sun.jvm.hotspot.types.AddressField doubleArrayKlassField;
53
54 private static AddressField narrowOopBaseField;
55 private static CIntegerField narrowOopShiftField;
56
57 static {
58 VM.registerVMInitializedObserver(new Observer() {
59 public void update(Observable o, Object data) {
60 initialize(VM.getVM().getTypeDataBase());
61 }
62 });
63 }
64
65 private static synchronized void initialize(TypeDataBase db) {
66 Type type = db.lookupType("Universe");
67
68 collectedHeapField = type.getAddressField("_collectedHeap");
69
70 heapConstructor = new VirtualConstructor(db);
71 heapConstructor.addMapping("GenCollectedHeap", GenCollectedHeap.class);
72 heapConstructor.addMapping("ParallelScavengeHeap", ParallelScavengeHeap.class);
73 heapConstructor.addMapping("G1CollectedHeap", G1CollectedHeap.class);
74
75 mainThreadGroupField = type.getOopField("_main_thread_group");
76 systemThreadGroupField = type.getOopField("_system_thread_group");
77
78 boolArrayKlassField = type.getAddressField("_boolArrayKlassObj");
79 byteArrayKlassField = type.getAddressField("_byteArrayKlassObj");
80 charArrayKlassField = type.getAddressField("_charArrayKlassObj");
81 intArrayKlassField = type.getAddressField("_intArrayKlassObj");
82 shortArrayKlassField = type.getAddressField("_shortArrayKlassObj");
83 longArrayKlassField = type.getAddressField("_longArrayKlassObj");
84 singleArrayKlassField = type.getAddressField("_singleArrayKlassObj");
85 doubleArrayKlassField = type.getAddressField("_doubleArrayKlassObj");
86
87 narrowOopBaseField = type.getAddressField("_narrow_oop._base");
88 narrowOopShiftField = type.getCIntegerField("_narrow_oop._shift");
89 }
90
91 public Universe() {
92 }
93
94 public CollectedHeap heap() {
95 try {
96 return (CollectedHeap) heapConstructor.instantiateWrapperFor(collectedHeapField.getValue());
97 } catch (WrongTypeException e) {
98 return new CollectedHeap(collectedHeapField.getValue());
99 }
100 }
101
102 public static long getNarrowOopBase() {
103 if (narrowOopBaseField.getValue() == null) {
104 return 0;
105 } else {
106 return narrowOopBaseField.getValue().minus(null);
107 }
108 }
109
110 public static int getNarrowOopShift() {
111 return (int)narrowOopShiftField.getValue();
112 }
113
114 /** Returns "TRUE" iff "p" points into the allocated area of the heap. */
115 public boolean isIn(Address p) {
116 return heap().isIn(p);
117 }
118
119 /** Returns "TRUE" iff "p" points into the reserved area of the heap. */
120 public boolean isInReserved(Address p) {
121 return heap().isInReserved(p);
122 }
123
124 private Oop newOop(OopHandle handle) {
125 return VM.getVM().getObjectHeap().newOop(handle);
126 }
127
128 public Oop mainThreadGroup() {
129 return newOop(mainThreadGroupField.getValue());
130 }
131
132 public Oop systemThreadGroup() {
|
36
37
38 public class Universe {
39 private static AddressField collectedHeapField;
40 private static VirtualConstructor heapConstructor;
41 private static sun.jvm.hotspot.types.OopField mainThreadGroupField;
42 private static sun.jvm.hotspot.types.OopField systemThreadGroupField;
43
44 // single dimensional primitive array klasses
45 private static sun.jvm.hotspot.types.AddressField boolArrayKlassField;
46 private static sun.jvm.hotspot.types.AddressField byteArrayKlassField;
47 private static sun.jvm.hotspot.types.AddressField charArrayKlassField;
48 private static sun.jvm.hotspot.types.AddressField intArrayKlassField;
49 private static sun.jvm.hotspot.types.AddressField shortArrayKlassField;
50 private static sun.jvm.hotspot.types.AddressField longArrayKlassField;
51 private static sun.jvm.hotspot.types.AddressField singleArrayKlassField;
52 private static sun.jvm.hotspot.types.AddressField doubleArrayKlassField;
53
54 private static AddressField narrowOopBaseField;
55 private static CIntegerField narrowOopShiftField;
56 private static AddressField narrowKlassBaseField;
57 private static CIntegerField narrowKlassShiftField;
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 private static synchronized void initialize(TypeDataBase db) {
68 Type type = db.lookupType("Universe");
69
70 collectedHeapField = type.getAddressField("_collectedHeap");
71
72 heapConstructor = new VirtualConstructor(db);
73 heapConstructor.addMapping("GenCollectedHeap", GenCollectedHeap.class);
74 heapConstructor.addMapping("ParallelScavengeHeap", ParallelScavengeHeap.class);
75 heapConstructor.addMapping("G1CollectedHeap", G1CollectedHeap.class);
76
77 mainThreadGroupField = type.getOopField("_main_thread_group");
78 systemThreadGroupField = type.getOopField("_system_thread_group");
79
80 boolArrayKlassField = type.getAddressField("_boolArrayKlassObj");
81 byteArrayKlassField = type.getAddressField("_byteArrayKlassObj");
82 charArrayKlassField = type.getAddressField("_charArrayKlassObj");
83 intArrayKlassField = type.getAddressField("_intArrayKlassObj");
84 shortArrayKlassField = type.getAddressField("_shortArrayKlassObj");
85 longArrayKlassField = type.getAddressField("_longArrayKlassObj");
86 singleArrayKlassField = type.getAddressField("_singleArrayKlassObj");
87 doubleArrayKlassField = type.getAddressField("_doubleArrayKlassObj");
88
89 narrowOopBaseField = type.getAddressField("_narrow_oop._base");
90 narrowOopShiftField = type.getCIntegerField("_narrow_oop._shift");
91 narrowKlassBaseField = type.getAddressField("_narrow_klass._base");
92 narrowKlassShiftField = type.getCIntegerField("_narrow_klass._shift");
93 }
94
95 public Universe() {
96 }
97
98 public CollectedHeap heap() {
99 try {
100 return (CollectedHeap) heapConstructor.instantiateWrapperFor(collectedHeapField.getValue());
101 } catch (WrongTypeException e) {
102 return new CollectedHeap(collectedHeapField.getValue());
103 }
104 }
105
106 public static long getNarrowOopBase() {
107 if (narrowOopBaseField.getValue() == null) {
108 return 0;
109 } else {
110 return narrowOopBaseField.getValue().minus(null);
111 }
112 }
113
114 public static int getNarrowOopShift() {
115 return (int)narrowOopShiftField.getValue();
116 }
117
118 public static long getNarrowKlassBase() {
119 if (narrowKlassBaseField.getValue() == null) {
120 return 0;
121 } else {
122 return narrowKlassBaseField.getValue().minus(null);
123 }
124 }
125
126 public static int getNarrowKlassShift() {
127 return (int)narrowKlassShiftField.getValue();
128 }
129
130
131 /** Returns "TRUE" iff "p" points into the allocated area of the heap. */
132 public boolean isIn(Address p) {
133 return heap().isIn(p);
134 }
135
136 /** Returns "TRUE" iff "p" points into the reserved area of the heap. */
137 public boolean isInReserved(Address p) {
138 return heap().isInReserved(p);
139 }
140
141 private Oop newOop(OopHandle handle) {
142 return VM.getVM().getObjectHeap().newOop(handle);
143 }
144
145 public Oop mainThreadGroup() {
146 return newOop(mainThreadGroupField.getValue());
147 }
148
149 public Oop systemThreadGroup() {
|