comparison agent/src/share/classes/sun/jvm/hotspot/memory/SystemDictionary.java @ 6725:da91efe96a93

6964458: Reimplement class meta-data storage to use native memory Summary: Remove PermGen, allocate meta-data in metaspace linked to class loaders, rewrite GC walking, rewrite and rename metadata to be C++ classes Reviewed-by: jmasa, stefank, never, coleenp, kvn, brutisso, mgerdin, dholmes, jrose, twisti, roland Contributed-by: jmasa <jon.masamitsu@oracle.com>, stefank <stefan.karlsson@oracle.com>, mgerdin <mikael.gerdin@oracle.com>, never <tom.rodriguez@oracle.com>
author coleenp
date Sat, 01 Sep 2012 13:25:18 -0400
parents b2cd0ee8f778
children
comparison
equal deleted inserted replaced
6724:36d1d483d5d6 6725:da91efe96a93
35 private static AddressField sharedDictionaryField; 35 private static AddressField sharedDictionaryField;
36 private static AddressField placeholdersField; 36 private static AddressField placeholdersField;
37 private static AddressField loaderConstraintTableField; 37 private static AddressField loaderConstraintTableField;
38 private static sun.jvm.hotspot.types.OopField javaSystemLoaderField; 38 private static sun.jvm.hotspot.types.OopField javaSystemLoaderField;
39 39
40 private static sun.jvm.hotspot.types.OopField objectKlassField; 40 private static AddressField objectKlassField;
41 private static sun.jvm.hotspot.types.OopField classLoaderKlassField; 41 private static AddressField classLoaderKlassField;
42 private static sun.jvm.hotspot.types.OopField stringKlassField; 42 private static AddressField stringKlassField;
43 private static sun.jvm.hotspot.types.OopField systemKlassField; 43 private static AddressField systemKlassField;
44 private static sun.jvm.hotspot.types.OopField threadKlassField; 44 private static AddressField threadKlassField;
45 private static sun.jvm.hotspot.types.OopField threadGroupKlassField; 45 private static AddressField threadGroupKlassField;
46 private static sun.jvm.hotspot.types.OopField methodHandleKlassField; 46 private static AddressField methodHandleKlassField;
47 47
48 static { 48 static {
49 VM.registerVMInitializedObserver(new Observer() { 49 VM.registerVMInitializedObserver(new Observer() {
50 public void update(Observable o, Object data) { 50 public void update(Observable o, Object data) {
51 initialize(VM.getVM().getTypeDataBase()); 51 initialize(VM.getVM().getTypeDataBase());
60 sharedDictionaryField = type.getAddressField("_shared_dictionary"); 60 sharedDictionaryField = type.getAddressField("_shared_dictionary");
61 placeholdersField = type.getAddressField("_placeholders"); 61 placeholdersField = type.getAddressField("_placeholders");
62 loaderConstraintTableField = type.getAddressField("_loader_constraints"); 62 loaderConstraintTableField = type.getAddressField("_loader_constraints");
63 javaSystemLoaderField = type.getOopField("_java_system_loader"); 63 javaSystemLoaderField = type.getOopField("_java_system_loader");
64 64
65 objectKlassField = type.getOopField(WK_KLASS("Object_klass")); 65 objectKlassField = type.getAddressField(WK_KLASS("Object_klass"));
66 classLoaderKlassField = type.getOopField(WK_KLASS("ClassLoader_klass")); 66 classLoaderKlassField = type.getAddressField(WK_KLASS("ClassLoader_klass"));
67 stringKlassField = type.getOopField(WK_KLASS("String_klass")); 67 stringKlassField = type.getAddressField(WK_KLASS("String_klass"));
68 systemKlassField = type.getOopField(WK_KLASS("System_klass")); 68 systemKlassField = type.getAddressField(WK_KLASS("System_klass"));
69 threadKlassField = type.getOopField(WK_KLASS("Thread_klass")); 69 threadKlassField = type.getAddressField(WK_KLASS("Thread_klass"));
70 threadGroupKlassField = type.getOopField(WK_KLASS("ThreadGroup_klass")); 70 threadGroupKlassField = type.getAddressField(WK_KLASS("ThreadGroup_klass"));
71 methodHandleKlassField = type.getOopField(WK_KLASS("MethodHandle_klass")); 71 methodHandleKlassField = type.getAddressField(WK_KLASS("MethodHandle_klass"));
72 } 72 }
73 73
74 // This WK functions must follow the definitions in systemDictionary.hpp: 74 // This WK functions must follow the definitions in systemDictionary.hpp:
75 private static String WK_KLASS(String name) { 75 private static String WK_KLASS(String name) {
76 //#define WK_KLASS(name) _well_known_klasses[SystemDictionary::WK_KLASS_ENUM_NAME(name)] 76 //#define WK_KLASS(name) _well_known_klasses[SystemDictionary::WK_KLASS_ENUM_NAME(name)]
102 } 102 }
103 103
104 // few well known classes -- not all are added here. 104 // few well known classes -- not all are added here.
105 // add more if needed. 105 // add more if needed.
106 public static InstanceKlass getThreadKlass() { 106 public static InstanceKlass getThreadKlass() {
107 return (InstanceKlass) newOop(threadKlassField.getValue()); 107 return (InstanceKlass)Metadata.instantiateWrapperFor(threadKlassField.getValue());
108 } 108 }
109 109
110 public static InstanceKlass getThreadGroupKlass() { 110 public static InstanceKlass getThreadGroupKlass() {
111 return (InstanceKlass) newOop(threadGroupKlassField.getValue()); 111 return (InstanceKlass)Metadata.instantiateWrapperFor(threadGroupKlassField.getValue());
112 } 112 }
113 113
114 public static InstanceKlass getObjectKlass() { 114 public static InstanceKlass getObjectKlass() {
115 return (InstanceKlass) newOop(objectKlassField.getValue()); 115 return (InstanceKlass)Metadata.instantiateWrapperFor(objectKlassField.getValue());
116 } 116 }
117 117
118 public static InstanceKlass getStringKlass() { 118 public static InstanceKlass getStringKlass() {
119 return (InstanceKlass) newOop(stringKlassField.getValue()); 119 return (InstanceKlass)Metadata.instantiateWrapperFor(stringKlassField.getValue());
120 } 120 }
121 121
122 public static InstanceKlass getClassLoaderKlass() { 122 public static InstanceKlass getClassLoaderKlass() {
123 return (InstanceKlass) newOop(classLoaderKlassField.getValue()); 123 return (InstanceKlass)Metadata.instantiateWrapperFor(classLoaderKlassField.getValue());
124 } 124 }
125 125
126 public static InstanceKlass getSystemKlass() { 126 public static InstanceKlass getSystemKlass() {
127 return (InstanceKlass) newOop(systemKlassField.getValue()); 127 return (InstanceKlass)Metadata.instantiateWrapperFor(systemKlassField.getValue());
128 } 128 }
129 129
130 public static InstanceKlass getMethodHandleKlass() { 130 public static InstanceKlass getMethodHandleKlass() {
131 return (InstanceKlass) newOop(methodHandleKlassField.getValue()); 131 return (InstanceKlass)Metadata.instantiateWrapperFor(methodHandleKlassField.getValue());
132 } 132 }
133 133
134 public InstanceKlass getAbstractOwnableSynchronizerKlass() { 134 public InstanceKlass getAbstractOwnableSynchronizerKlass() {
135 return (InstanceKlass) find("java/util/concurrent/locks/AbstractOwnableSynchronizer", 135 return (InstanceKlass) find("java/util/concurrent/locks/AbstractOwnableSynchronizer",
136 null, null); 136 null, null);