< prev index next >

src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/memory/SystemDictionary.java

Print this page

        

*** 24,42 **** package sun.jvm.hotspot.memory; import java.util.*; import sun.jvm.hotspot.debugger.*; 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; --- 24,40 ---- 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 sharedDictionaryField; private static sun.jvm.hotspot.types.OopField javaSystemLoaderField; private static AddressField objectKlassField; private static AddressField classLoaderKlassField; private static AddressField stringKlassField;
*** 54,67 **** } 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")); --- 52,62 ----
*** 79,108 **** 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()); } --- 74,88 ----
*** 130,202 **** public static InstanceKlass getMethodHandleKlass() { return (InstanceKlass)Metadata.instantiateWrapperFor(methodHandleKlassField.getValue()); } public InstanceKlass getAbstractOwnableSynchronizerKlass() { ! return (InstanceKlass) find("java/util/concurrent/locks/AbstractOwnableSynchronizer", ! null, null); } 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); - } } --- 110,126 ---- public static InstanceKlass getMethodHandleKlass() { return (InstanceKlass)Metadata.instantiateWrapperFor(methodHandleKlassField.getValue()); } public InstanceKlass getAbstractOwnableSynchronizerKlass() { ! 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); } }
< prev index next >