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

标签 java jvm

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

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

java com.package.Foo

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

cat classes-used.txt
com.package.Foo
com.package.FooHelper
com.otherpackage.SomeClass
java.lang.String
java.util.List
java.util.ArrayList

在此上下文中,如果类已在程序执行期间由类加载器加载,并且如果存在此类静态 block ,则该类的静态 block 将被运行,则该类被定义为正在使用。

最佳答案

使用标志 verbose:class 运行 java

java -verbose:class com.package.Foo

将其附加到文件中:

java -verbose:class com.package.Foo > classes-used.txt

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

比如这个类

public class Test {
     public static void main( String [] args ) {
     }
}

我有(除其他外)

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

关于java - 获取运行 Java 应用程序时使用的所有类的列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1522329/

相关文章:

java - 枚举方法的通用返回类型

java - 在 Spring MVC Controller 中声明变量的最佳实践是什么

java - 使 JPanel 不绘制其背景(透明)

java - 有没有办法在 Java 应用程序中完全禁用 RMI?

java - 在 Oreo 上复制 SQLite 数据库

java - 在Spring boot pom.xml中指定java 1.8 JDK路径,而不将java_home设置为1.8版本

java - 哪些内存相关的Tomcat JVM启动参数值得调优?

java - 如何在 linux 环境和 tomcat 中调试 jmv 堆栈与 java 应用程序崩溃 ramdonly?

java - 如何选择jvm堆大小?

java - 即使 HotSpot 中没有 CMS 的 Full GC,如何减少老年代的大小?