获取运行Java应用程序时使用的所有类的列表?

kno*_*orv 5 java jvm

获取运行Java应用程序时使用的所有类的列表的最简单方法是什么?

假设com.package.Foo.main通过运行调用:

java com.package.Foo
Run Code Online (Sandbox Code Playgroud)

运行程序后,我想要一个运行程序时使用的所有类的列表:

cat classes-used.txt
com.package.Foo
com.package.FooHelper
com.otherpackage.SomeClass
java.lang.String
java.util.List
java.util.ArrayList
Run Code Online (Sandbox Code Playgroud)

在此上下文中,如果类在程序执行期间由类加载器加载,则定义为使用类,如果存在此静态块,则运行类静态块.

Osc*_*Ryz 13

使用标志verbose:class运行java

java -verbose:class com.package.Foo
Run Code Online (Sandbox Code Playgroud)

要将其附加到文件:

java -verbose:class com.package.Foo > classes-used.txt
Run Code Online (Sandbox Code Playgroud)

等等

它还列出了定义这些文件的jar:

例如这个班级

public class Test {
     public static void main( String [] args ) {
     }
}
Run Code Online (Sandbox Code Playgroud)

我有(其中包括)

$ java -verbose:class Test 
[Opened /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Classes/classes.jar]
[Opened /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Classes/ui.jar]
[Opened /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Classes/laf.jar]
[Opened /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Classes/jsse.jar]
[Opened /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Classes/jce.jar]
[Opened /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Classes/charsets.jar]
[Loaded java.lang.Object from shared objects file]
[Loaded java.io.Serializable from shared objects file]
[Loaded java.lang.Comparable from shared objects file]
[Loaded java.lang.CharSequence from shared objects file]
[Loaded java.lang.String from shared objects file]
[Loaded java.lang.reflect.GenericDeclaration from shared objects file]
[Loaded java.lang.reflect.Type from shared objects file]
[Loaded java.lang.reflect.AnnotatedElement from shared objects file]
[Loaded java.lang.Class from shared objects file]
[Loaded java.lang.Cloneable from shared objects file]
[Loaded java.lang.ClassLoader from shared objects file]
[Loaded java.lang.System from shared objects file]