< prev index next >
src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/classfile/ClassLoaderDataGraph.java
Print this page
*** 25,34 ****
--- 25,35 ----
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,72 ****
public ClassLoaderData getClassLoaderGraphHead() {
return ClassLoaderData.instantiateWrapperFor(headField.getValue());
}
! public static interface KlassVisitor {
! public void visit(Klass k);
}
! /** 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);
}
}
}
}
}
--- 51,95 ----
public ClassLoaderData getClassLoaderGraphHead() {
return ClassLoaderData.instantiateWrapperFor(headField.getValue());
}
! /** 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;
}
! /** 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 >