java - 如何分析 jar 内的类?

标签 java jar profiling executable-jar hprof

如果我在 JAR 中有一个类(用 mvn assembly:assemble 编译),我试图对其进行分析,那么获取有效核心转储的命令是什么,我可以将其与 jhat 或Eclipse 内存分析器?

我尝试运行这个:

java -agentlib:hprof=heap=sites,cpu=samples,file=profile.hprof,format=b -jar the-jar.jar

当我停止进程时,会创建核心转储。

但是 jhat 或 Eclipse Memory Analyzer 都不会将其识别为有效的转储。

jhat 给了我这个警告:

Resolving 0 objects...
WARNING:  hprof file does not include java.lang.Class!
WARNING:  hprof file does not include java.lang.String!
WARNING:  hprof file does not include java.lang.ClassLoader!

还阅读了 hprof 文档,我发现我必须传递类名。当它位于 JAR 内时,我该如何执行此操作?

最佳答案

该类是从 JAR 文件加载的事实与堆转储无关。

您可以使用jmap来获取可用的HPROF堆转储,而无需修改启动命令。

jmap -heap:format=b <pid>

哪里是您可以使用jps命令行实用程序获取的进程ID。这两个可执行文件都是 JDK 的一部分。

关于java - 如何分析 jar 内的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13236444/

相关文章:

java - 为什么从已满的队列中发送 Spring AMQP 消息会出现延迟?

java - myBatis 中如何映射一对多关系?

java - 将 android.net MailTo 类导入现有 (Mule) java 项目

c# - 如何接收 SQL Server 事件探查器事件?

java - 处理 Javers 审计中的架构更改

java - 在 Linux 服务器上的命令提示符下运行 Jar 文件

java - Maven 无法找到或加载主类

java - 当 Java 中出现堆溢出时,我如何知道什么正在使用内存?

haskell - 使用 `deriving` 关键字分析 GHC 生成的函数

Java 字符串到数组