22 * |
22 * |
23 */ |
23 */ |
24 |
24 |
25 package sun.jvm.hotspot.memory; |
25 package sun.jvm.hotspot.memory; |
26 |
26 |
27 import java.io.*; |
27 import java.io.PrintStream; |
28 import java.util.*; |
28 import java.util.Observable; |
29 import sun.jvm.hotspot.debugger.*; |
29 import java.util.Observer; |
|
30 |
|
31 import sun.jvm.hotspot.debugger.Address; |
|
32 import sun.jvm.hotspot.debugger.OopHandle; |
30 import sun.jvm.hotspot.gc.cms.CMSHeap; |
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; |
31 import sun.jvm.hotspot.gc.serial.SerialHeap; |
37 import sun.jvm.hotspot.gc.serial.SerialHeap; |
32 import sun.jvm.hotspot.gc.shared.*; |
38 import sun.jvm.hotspot.gc.shared.CollectedHeap; |
33 import sun.jvm.hotspot.gc.g1.G1CollectedHeap; |
39 import sun.jvm.hotspot.gc.z.ZCollectedHeap; |
34 import sun.jvm.hotspot.gc.epsilon.EpsilonHeap; |
40 import sun.jvm.hotspot.oops.Oop; |
35 import sun.jvm.hotspot.gc.parallel.*; |
41 import sun.jvm.hotspot.runtime.BasicType; |
36 import sun.jvm.hotspot.oops.*; |
42 import sun.jvm.hotspot.runtime.VM; |
37 import sun.jvm.hotspot.types.*; |
43 import sun.jvm.hotspot.runtime.VirtualConstructor; |
38 import sun.jvm.hotspot.runtime.*; |
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; |
39 |
48 |
40 |
49 |
41 public class Universe { |
50 public class Universe { |
42 private static AddressField collectedHeapField; |
51 private static AddressField collectedHeapField; |
43 private static VirtualConstructor heapConstructor; |
52 private static VirtualConstructor heapConstructor; |
71 initialize(VM.getVM().getTypeDataBase()); |
80 initialize(VM.getVM().getTypeDataBase()); |
72 } |
81 } |
73 }); |
82 }); |
74 } |
83 } |
75 |
84 |
|
85 private static boolean typeExists(TypeDataBase db, String type) { |
|
86 try { |
|
87 db.lookupType(type); |
|
88 } catch (RuntimeException e) { |
|
89 return false; |
|
90 } |
|
91 return true; |
|
92 } |
|
93 |
|
94 private static void addHeapTypeIfInDB(TypeDataBase db, Class heapClass) { |
|
95 String heapName = heapClass.getSimpleName(); |
|
96 if (typeExists(db, heapName)) { |
|
97 heapConstructor.addMapping(heapName, heapClass); |
|
98 } |
|
99 } |
|
100 |
76 private static synchronized void initialize(TypeDataBase db) { |
101 private static synchronized void initialize(TypeDataBase db) { |
77 Type type = db.lookupType("Universe"); |
102 Type type = db.lookupType("Universe"); |
78 |
103 |
79 collectedHeapField = type.getAddressField("_collectedHeap"); |
104 collectedHeapField = type.getAddressField("_collectedHeap"); |
80 |
105 |
81 heapConstructor = new VirtualConstructor(db); |
106 heapConstructor = new VirtualConstructor(db); |
82 heapConstructor.addMapping("CMSHeap", CMSHeap.class); |
107 addHeapTypeIfInDB(db, CMSHeap.class); |
83 heapConstructor.addMapping("SerialHeap", SerialHeap.class); |
108 addHeapTypeIfInDB(db, SerialHeap.class); |
84 heapConstructor.addMapping("ParallelScavengeHeap", ParallelScavengeHeap.class); |
109 addHeapTypeIfInDB(db, ParallelScavengeHeap.class); |
85 heapConstructor.addMapping("G1CollectedHeap", G1CollectedHeap.class); |
110 addHeapTypeIfInDB(db, G1CollectedHeap.class); |
86 heapConstructor.addMapping("EpsilonHeap", EpsilonHeap.class); |
111 addHeapTypeIfInDB(db, EpsilonHeap.class); |
|
112 addHeapTypeIfInDB(db, ZCollectedHeap.class); |
87 |
113 |
88 mainThreadGroupField = type.getOopField("_main_thread_group"); |
114 mainThreadGroupField = type.getOopField("_main_thread_group"); |
89 systemThreadGroupField = type.getOopField("_system_thread_group"); |
115 systemThreadGroupField = type.getOopField("_system_thread_group"); |
90 |
116 |
91 boolArrayKlassField = type.getAddressField("_boolArrayKlassObj"); |
117 boolArrayKlassField = type.getAddressField("_boolArrayKlassObj"); |