19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25 package sun.jvm.hotspot.memory;
26
27 import java.io.PrintStream;
28 import java.util.Observable;
29 import java.util.Observer;
30
31 import sun.jvm.hotspot.debugger.Address;
32 import sun.jvm.hotspot.debugger.OopHandle;
33 import sun.jvm.hotspot.gc.cms.CMSHeap;
34 import sun.jvm.hotspot.gc.epsilon.EpsilonHeap;
35 import sun.jvm.hotspot.gc.g1.G1CollectedHeap;
36 import sun.jvm.hotspot.gc.parallel.ParallelScavengeHeap;
37 import sun.jvm.hotspot.gc.serial.SerialHeap;
38 import sun.jvm.hotspot.gc.shared.CollectedHeap;
39 import sun.jvm.hotspot.gc.z.ZCollectedHeap;
40 import sun.jvm.hotspot.oops.Oop;
41 import sun.jvm.hotspot.runtime.BasicType;
42 import sun.jvm.hotspot.runtime.VM;
43 import sun.jvm.hotspot.runtime.VirtualConstructor;
44 import sun.jvm.hotspot.types.AddressField;
45 import sun.jvm.hotspot.types.CIntegerField;
46 import sun.jvm.hotspot.types.Type;
47 import sun.jvm.hotspot.types.TypeDataBase;
48
49
50 public class Universe {
51 private static AddressField collectedHeapField;
52 private static VirtualConstructor heapConstructor;
53 private static sun.jvm.hotspot.types.OopField mainThreadGroupField;
54 private static sun.jvm.hotspot.types.OopField systemThreadGroupField;
55
56 private static AddressField narrowOopBaseField;
57 private static CIntegerField narrowOopShiftField;
58 private static AddressField narrowKlassBaseField;
83
84 private static void addHeapTypeIfInDB(TypeDataBase db, Class heapClass) {
85 String heapName = heapClass.getSimpleName();
86 if (typeExists(db, heapName)) {
87 heapConstructor.addMapping(heapName, heapClass);
88 }
89 }
90
91 private static synchronized void initialize(TypeDataBase db) {
92 Type type = db.lookupType("Universe");
93
94 collectedHeapField = type.getAddressField("_collectedHeap");
95
96 heapConstructor = new VirtualConstructor(db);
97 addHeapTypeIfInDB(db, CMSHeap.class);
98 addHeapTypeIfInDB(db, SerialHeap.class);
99 addHeapTypeIfInDB(db, ParallelScavengeHeap.class);
100 addHeapTypeIfInDB(db, G1CollectedHeap.class);
101 addHeapTypeIfInDB(db, EpsilonHeap.class);
102 addHeapTypeIfInDB(db, ZCollectedHeap.class);
103
104 mainThreadGroupField = type.getOopField("_main_thread_group");
105 systemThreadGroupField = type.getOopField("_system_thread_group");
106
107 narrowOopBaseField = type.getAddressField("_narrow_oop._base");
108 narrowOopShiftField = type.getCIntegerField("_narrow_oop._shift");
109 narrowKlassBaseField = type.getAddressField("_narrow_klass._base");
110 narrowKlassShiftField = type.getCIntegerField("_narrow_klass._shift");
111
112 UniverseExt.initialize(heapConstructor);
113 }
114
115 public Universe() {
116 }
117 public static String narrowOopModeToString(NARROW_OOP_MODE mode) {
118 switch (mode) {
119 case UnscaledNarrowOop:
120 return "32-bits Oops";
121 case ZeroBasedNarrowOop:
122 return "zero based Compressed Oops";
|
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25 package sun.jvm.hotspot.memory;
26
27 import java.io.PrintStream;
28 import java.util.Observable;
29 import java.util.Observer;
30
31 import sun.jvm.hotspot.debugger.Address;
32 import sun.jvm.hotspot.debugger.OopHandle;
33 import sun.jvm.hotspot.gc.cms.CMSHeap;
34 import sun.jvm.hotspot.gc.epsilon.EpsilonHeap;
35 import sun.jvm.hotspot.gc.g1.G1CollectedHeap;
36 import sun.jvm.hotspot.gc.parallel.ParallelScavengeHeap;
37 import sun.jvm.hotspot.gc.serial.SerialHeap;
38 import sun.jvm.hotspot.gc.shared.CollectedHeap;
39 import sun.jvm.hotspot.gc.shenandoah.ShenandoahHeap;
40 import sun.jvm.hotspot.gc.z.ZCollectedHeap;
41 import sun.jvm.hotspot.oops.Oop;
42 import sun.jvm.hotspot.runtime.BasicType;
43 import sun.jvm.hotspot.runtime.VM;
44 import sun.jvm.hotspot.runtime.VirtualConstructor;
45 import sun.jvm.hotspot.types.AddressField;
46 import sun.jvm.hotspot.types.CIntegerField;
47 import sun.jvm.hotspot.types.Type;
48 import sun.jvm.hotspot.types.TypeDataBase;
49
50
51 public class Universe {
52 private static AddressField collectedHeapField;
53 private static VirtualConstructor heapConstructor;
54 private static sun.jvm.hotspot.types.OopField mainThreadGroupField;
55 private static sun.jvm.hotspot.types.OopField systemThreadGroupField;
56
57 private static AddressField narrowOopBaseField;
58 private static CIntegerField narrowOopShiftField;
59 private static AddressField narrowKlassBaseField;
84
85 private static void addHeapTypeIfInDB(TypeDataBase db, Class heapClass) {
86 String heapName = heapClass.getSimpleName();
87 if (typeExists(db, heapName)) {
88 heapConstructor.addMapping(heapName, heapClass);
89 }
90 }
91
92 private static synchronized void initialize(TypeDataBase db) {
93 Type type = db.lookupType("Universe");
94
95 collectedHeapField = type.getAddressField("_collectedHeap");
96
97 heapConstructor = new VirtualConstructor(db);
98 addHeapTypeIfInDB(db, CMSHeap.class);
99 addHeapTypeIfInDB(db, SerialHeap.class);
100 addHeapTypeIfInDB(db, ParallelScavengeHeap.class);
101 addHeapTypeIfInDB(db, G1CollectedHeap.class);
102 addHeapTypeIfInDB(db, EpsilonHeap.class);
103 addHeapTypeIfInDB(db, ZCollectedHeap.class);
104 addHeapTypeIfInDB(db, ShenandoahHeap.class);
105
106 mainThreadGroupField = type.getOopField("_main_thread_group");
107 systemThreadGroupField = type.getOopField("_system_thread_group");
108
109 narrowOopBaseField = type.getAddressField("_narrow_oop._base");
110 narrowOopShiftField = type.getCIntegerField("_narrow_oop._shift");
111 narrowKlassBaseField = type.getAddressField("_narrow_klass._base");
112 narrowKlassShiftField = type.getCIntegerField("_narrow_klass._shift");
113
114 UniverseExt.initialize(heapConstructor);
115 }
116
117 public Universe() {
118 }
119 public static String narrowOopModeToString(NARROW_OOP_MODE mode) {
120 switch (mode) {
121 case UnscaledNarrowOop:
122 return "32-bits Oops";
123 case ZeroBasedNarrowOop:
124 return "zero based Compressed Oops";
|