< prev index next >
src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/classfile/ClassLoaderDataGraph.java
Print this page
@@ -25,10 +25,11 @@
package sun.jvm.hotspot.classfile;
import java.io.PrintStream;
import java.util.*;
import sun.jvm.hotspot.debugger.*;
+import sun.jvm.hotspot.classfile.*;
import sun.jvm.hotspot.runtime.*;
import sun.jvm.hotspot.oops.*;
import sun.jvm.hotspot.types.*;
public class ClassLoaderDataGraph {
@@ -50,23 +51,45 @@
public ClassLoaderData getClassLoaderGraphHead() {
return ClassLoaderData.instantiateWrapperFor(headField.getValue());
}
- public static interface KlassVisitor {
- public void visit(Klass k);
+ /** Lookup an already loaded class in any class loader. */
+ public Klass find(String className) {
+ Symbol sym = VM.getVM().getSymbolTable().probe(className);
+ if (sym == null) return null;
+ for (ClassLoaderData cld = getClassLoaderGraphHead(); cld != null; cld = cld.next()) {
+ Klass k = cld.find(sym);
+ if (k != null) {
+ return k;
+ }
+ }
+ return null;
}
- /** Iterate over all anonymous class loaders and the klasses in those */
- public void allAnonymousKlassesDo(final KlassVisitor v) {
- for (ClassLoaderData cl = getClassLoaderGraphHead();
- cl != null;
- cl = cl.next()) {
- if (cl.getIsAnonymous() == true) {
- for (Klass k = cl.getKlasses(); k != null; k = k.getNextLinkKlass()) {
- v.visit(k);
+ /** Interface for iterating through all classes. */
+ 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 classesDo(ClassVisitor v) {
+ for (ClassLoaderData cld = getClassLoaderGraphHead(); cld != null; cld = cld.next()) {
+ cld.classesDo(v);
}
}
+ /** Iterate over all klasses - including object, primitive
+ array klasses, pass initiating loader. */
+ public void allEntriesDo(ClassAndLoaderVisitor v) {
+ for (ClassLoaderData cld = getClassLoaderGraphHead(); cld != null; cld = cld.next()) {
+ cld.allEntriesDo(v);
+ }
+ }
}
< prev index next >