Java详细类加载

Bob*_*r02 51 java jvm classloader

我试图列出Java类加载器加载我的类的顺序.如果我使用-verbose的参数将列出每一个接口/类加载,包括吨,如序列化接口,异常等是否有办法来调整这个输出,因此只有这些类是在类加载显示我的主要方法是定义?

nwi*_*ler 55

我想你最好的办法是做以下事情:

  • 一旦您的main方法开始并且在它结束之前输出一些固定文本.
  • 详细输出传递到文件中
  • 使用lessgrep之类的东西来查找main方法中两个标记之间加载的类.

这里有一个类似的问题和一些答案:有没有办法让ClassLoader加载哪些类?

你试过-verbose:class吗?

  • 如果有人想知道这个记录在哪里:https://docs.oracle.com/en/java/javase/11/tools/java.html (3认同)

Nic*_*kin 8

这是一个sed表达式,它将解析java -verbose:class的输出,以生成加载的类名及其jar文件对.您可以进一步管理排序以获取唯一的jar文件.例如,

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

输出

/usr/local/jdk1.7.0_67/jre/lib/rt.jar
Run Code Online (Sandbox Code Playgroud)