70

我试图列出 Java 类加载器加载我的类的顺序。如果我使用-verbose参数,它将列出它加载的每个接口/类,包括大量接口,如可序列化、异常等。有没有办法调整这个输出,所以它只显示在我的主方法定义的类中加载了哪些类?

4

2 回答 2

72

我想你最好的选择是执行以下操作:

  • main一旦你的方法开始和结束之前输出一些固定的文本。
  • 将详细输出通过管道传输到文件中
  • 使用诸如lessgrep之类的东西从 main 方法中查找在两个标签之间加载的类。

这里有一个类似的问题和一些答案:Is there a way to get which classes a ClassLoader has load?

你试过了-verbose:class吗?

于 2012-04-19T14:33:41.947 回答
14

这是一个 sed 表达式,它将解析 java -verbose: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
于 2017-03-24T22:57:40.730 回答