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