< 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 >