Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何调试JVM资源加载?_Java_Debugging_Jvm_Profiling_Classloader - Fatal编程技术网

Java 如何调试JVM资源加载?

Java 如何调试JVM资源加载?,java,debugging,jvm,profiling,classloader,Java,Debugging,Jvm,Profiling,Classloader,要调试JVM中的类加载,我们可以使用param-verbose:class,但是。。。有人知道如何调试资源加载(例如属性文件)吗?我想您需要看看如何使用探查器。或者使用仪器接口的东西 不确定它有多稳定,但有一个,这是DTrace的Java版本 BTrace是Java平台的安全、动态跟踪工具。 BTrace可用于动态跟踪正在运行的Java程序。BTrace动态地检测目标应用程序的类以注入跟踪代码(“字节码跟踪”)。跟踪代码用Java编程语言表示 如果在开发计算机上执行此操作,并且事件数(加载的资源

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

我想您需要看看如何使用探查器。或者使用仪器接口的东西

不确定它有多稳定,但有一个,这是DTrace的Java版本

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


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

资源以
URL
s的形式提供。因此,我想在“纯”Java中这样做:安装一个自定义的
ClassLoader
,它将
URL
s复制到一个带有自定义
URLStreamHandler
的版本中。将监控代码放入流处理程序并转发到原始代码。

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

lsof -p <jvm pid>
lsof-p
它将为您提供一个列表,其中包含与指定pid关联的程序所使用的描述符

您可以使用它来检测执行加载的类加载器类

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

  • 类加载器
  • URLClassPath
  • 装载机

有几种技术可以调试类加载问题。下面是来自JRebel创建者的优秀幻灯片,总结了这些技术:

问题是许多资源可以从一个jar文件加载,可能只打开一次。我同意,在这种情况下,我认为最好的选择是使用类加载器solution@FastSnail当前位置他们似乎搬到了Github。链接已更新。