< prev index next >

src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/utilities/SystemDictionaryHelper.java

Print this page

        

@@ -23,10 +23,11 @@
  */
 
 package sun.jvm.hotspot.utilities;
 
 import java.util.*;
+import sun.jvm.hotspot.classfile.*;
 import sun.jvm.hotspot.oops.*;
 import sun.jvm.hotspot.memory.*;
 import sun.jvm.hotspot.runtime.*;
 
 public class SystemDictionaryHelper {

@@ -50,12 +51,12 @@
       if (klasses != null) {
          return klasses;
       }
 
       final Vector tmp = new Vector();
-      SystemDictionary dict = VM.getVM().getSystemDictionary();
-      dict.classesDo(new SystemDictionary.ClassVisitor() {
+      ClassLoaderDataGraph cldg = VM.getVM().getClassLoaderDataGraph();
+      cldg.classesDo(new ClassLoaderDataGraph.ClassVisitor() {
                         public void visit(Klass k) {
                            if (k instanceof InstanceKlass) {
                               InstanceKlass ik = (InstanceKlass) k;
                               tmp.add(ik);
                            }

@@ -98,44 +99,17 @@
 
    // find first class whose name matches exactly the given argument.
    public static InstanceKlass findInstanceKlass(String className) {
       // convert to internal name
       className = className.replace('.', '/');
-      SystemDictionary sysDict = VM.getVM().getSystemDictionary();
+      ClassLoaderDataGraph cldg = VM.getVM().getClassLoaderDataGraph();
 
-      // check whether we have a bootstrap class of given name
-      Klass klass = sysDict.find(className, null, null);
-      if (klass != null) {
+      // check whether we have a class of given name
+      Klass klass = cldg.find(className);
+      if (klass != null && klass instanceof InstanceKlass) {
          return (InstanceKlass) klass;
-      }
-
-      // check whether we have a system class of given name
-      klass = sysDict.find(className, sysDict.javaSystemLoader(), null);
-      if (klass != null) {
-         return (InstanceKlass) klass;
-      }
-
-      // didn't find bootstrap or system class of given name.
-      // search through the entire dictionary..
-      InstanceKlass[] tmpKlasses = getAllInstanceKlasses();
-      // instance klass array is sorted by name. do binary search
-      int low = 0;
-      int high = tmpKlasses.length-1;
-
-      int mid = -1;
-      while (low <= high) {
-         mid = (low + high) >> 1;
-         InstanceKlass midVal = tmpKlasses[mid];
-         int cmp = midVal.getName().asString().compareTo(className);
-
-         if (cmp < 0) {
-             low = mid + 1;
-         } else if (cmp > 0) {
-             high = mid - 1;
-         } else { // match found
-             return tmpKlasses[mid];
-         }
-      }
+      } else {
       // no match ..
       return null;
    }
+   }
 }
< prev index next >