< prev index next >
src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/memory/SystemDictionary.java
Print this page
@@ -24,19 +24,17 @@
package sun.jvm.hotspot.memory;
import java.util.*;
import sun.jvm.hotspot.debugger.*;
+import sun.jvm.hotspot.classfile.*;
import sun.jvm.hotspot.oops.*;
import sun.jvm.hotspot.runtime.*;
import sun.jvm.hotspot.types.*;
public class SystemDictionary {
- private static AddressField dictionaryField;
private static AddressField sharedDictionaryField;
- private static AddressField placeholdersField;
- private static AddressField loaderConstraintTableField;
private static sun.jvm.hotspot.types.OopField javaSystemLoaderField;
private static AddressField objectKlassField;
private static AddressField classLoaderKlassField;
private static AddressField stringKlassField;
@@ -54,14 +52,11 @@
}
private static synchronized void initialize(TypeDataBase db) {
Type type = db.lookupType("SystemDictionary");
- dictionaryField = type.getAddressField("_dictionary");
sharedDictionaryField = type.getAddressField("_shared_dictionary");
- placeholdersField = type.getAddressField("_placeholders");
- loaderConstraintTableField = type.getAddressField("_loader_constraints");
javaSystemLoaderField = type.getOopField("_java_system_loader");
objectKlassField = type.getAddressField(WK_KLASS("Object_klass"));
classLoaderKlassField = type.getAddressField(WK_KLASS("ClassLoader_klass"));
stringKlassField = type.getAddressField(WK_KLASS("String_klass"));
@@ -79,30 +74,15 @@
private static String WK_KLASS_ENUM_NAME(String kname) {
//#define WK_KLASS_ENUM_NAME(kname) kname##_knum
return (kname+"_knum");
}
- public Dictionary dictionary() {
- Address tmp = dictionaryField.getValue();
- return (Dictionary) VMObjectFactory.newObject(Dictionary.class, tmp);
- }
-
public Dictionary sharedDictionary() {
Address tmp = sharedDictionaryField.getValue();
return (Dictionary) VMObjectFactory.newObject(Dictionary.class, tmp);
}
- public PlaceholderTable placeholders() {
- Address tmp = placeholdersField.getValue();
- return (PlaceholderTable) VMObjectFactory.newObject(PlaceholderTable.class, tmp);
- }
-
- public LoaderConstraintTable constraints() {
- Address tmp = placeholdersField.getValue();
- return (LoaderConstraintTable) VMObjectFactory.newObject(LoaderConstraintTable.class, tmp);
- }
-
// few well known classes -- not all are added here.
// add more if needed.
public static InstanceKlass getThreadKlass() {
return (InstanceKlass)Metadata.instantiateWrapperFor(threadKlassField.getValue());
}
@@ -130,73 +110,17 @@
public static InstanceKlass getMethodHandleKlass() {
return (InstanceKlass)Metadata.instantiateWrapperFor(methodHandleKlassField.getValue());
}
public InstanceKlass getAbstractOwnableSynchronizerKlass() {
- return (InstanceKlass) find("java/util/concurrent/locks/AbstractOwnableSynchronizer",
- null, null);
+ ClassLoaderDataGraph cldg = VM.getVM().getClassLoaderDataGraph();
+ return (InstanceKlass) cldg.find("java/util/concurrent/locks/AbstractOwnableSynchronizer");
}
public static Oop javaSystemLoader() {
return newOop(javaSystemLoaderField.getValue());
}
private static Oop newOop(OopHandle handle) {
return VM.getVM().getObjectHeap().newOop(handle);
}
-
- /** Lookup an already loaded class. If not found null is returned. */
- public Klass find(String className, Oop classLoader, Oop protectionDomain) {
- Symbol sym = VM.getVM().getSymbolTable().probe(className);
- if (sym == null) return null;
- return find(sym, classLoader, protectionDomain);
- }
-
- /** Lookup an already loaded class. If not found null is returned. */
- public Klass find(Symbol className, Oop classLoader, Oop protectionDomain) {
- Dictionary dict = dictionary();
- long hash = dict.computeHash(className, classLoader);
- int index = dict.hashToIndex(hash);
- return dict.find(index, hash, className, classLoader, protectionDomain);
- }
-
- /** Interface for iterating through all classes in dictionary */
- public static interface ClassVisitor {
- public void visit(Klass k);
- }
-
- /** Interface for iterating through all classes and their class
- loaders in dictionary */
- public static interface ClassAndLoaderVisitor {
- public void visit(Klass k, Oop loader);
- }
-
- /** Iterate over all klasses - including object, primitive
- array klasses */
- public void allClassesDo(final ClassVisitor v) {
- ClassVisitor visitor = new ClassVisitor() {
- public void visit(Klass k) {
- for (Klass l = k; l != null; l = l.arrayKlassOrNull()) {
- v.visit(l);
- }
- }
- };
- classesDo(visitor);
- VM.getVM().getUniverse().basicTypeClassesDo(visitor);
- }
-
- /** Iterate over all klasses in dictionary; just the classes from
- declaring class loaders */
- public void classesDo(ClassVisitor v) {
- dictionary().classesDo(v);
- }
-
- /** All classes, and their class loaders */
- public void classesDo(ClassAndLoaderVisitor v) {
- dictionary().classesDo(v);
- }
-
- /** All array classes of primitive type, and their class loaders */
- public void primArrayClassesDo(ClassAndLoaderVisitor v) {
- placeholders().primArrayClassesDo(v);
- }
}
< prev index next >