Java 详细类加载

我试图列出 Java 类装入器装入我的类的顺序。如果我使用 -verbose参数,它会列出它装载的每一个接口/类,包括成吨的接口,例如 Serializer,异常等。有没有一种方法可以调整这个输出,使它只显示哪些类被装载到我的主方法定义的类中?

108097 次浏览

我想你最好的选择是这样做:

  • 一旦 main方法开始并在结束之前输出一些固定的文本。
  • 冗长输出导入到一个文件中
  • 使用像 更少Grep这样的东西来查找 main 方法中两个标记之间加载的类。

这里有一个类似的问题和一些答案: 有没有一种方法可以得到 ClassLoader 已经加载了哪些类?

你试过 -verbose:class吗?

下面是一个 sed 表达式,它将解析 java-verose: class 的输出,以生成一对加载的类名及其 jar 文件。您可以进一步通过管道进行排序,以获得惟一的 jar 文件。比如说,

java -verbose:class -version 2>/dev/null |
sed -ne 's/\[Loaded \(.\+\) from \(.\+\)\]/\2/p' |
sort -u

输出

/usr/local/jdk1.7.0_67/jre/lib/rt.jar