14

要在 JVM 中调试类加载,我们可以使用 param -verbose:class,但是... 任何人都知道如何调试资源加载(例如属性文件)?

4

5 回答 5

3

我想你需要看看使用分析器。或者使用仪器接口的东西。

不确定它有多稳定,但是有BTrace,它是一种 Java 版本的 DTrace。

BTrace 是用于 Java 平台的安全、动态跟踪工具。BTrace 可用于动态跟踪正在运行的 Java 程序。BTrace 动态检测目标应用程序的类以注入跟踪代码(“字节码跟踪”)。跟踪代码以 Java 编程语言表示。

如果您在开发机器上执行此操作,并且事件(正在加载的资源)的数量不是太频繁,您也可以在调试器中设置一个断点。

于 2009-04-15T08:47:43.770 回答
2

资源以URLs 形式提供。所以,我想在“纯”Java 中做到这一点:安装一个将 sClassLoader复制URL到一个带有 custom 的版本的自定义URLStreamHandler. 将您的监控代码放在流处理程序中并转发到原始代码。

于 2009-04-15T08:57:32.060 回答
2

您可以使用InTrace来检测执行加载的 Classloader 类。

对于 Sun JVM,我建议使用以下 Include 模式来跟踪适当的类:

  • 类加载器
  • URL类路径
  • 装载机
于 2011-06-19T22:10:34.507 回答
1

在 Linux 环境中,您可以尝试:

lsof -p <jvm pid>

它将为您提供一个列表,其中包含与指定 pid 关联的程序使用的描述符。

更多信息

于 2009-04-15T10:55:56.707 回答
1

有几种技术可以调试类加载问题。以下是JRebel 创建者总结这些技术的好幻灯片:你真的得到类加载器吗?

于 2013-12-04T08:40:33.067 回答