当前位置: 首页 > 面试题库 >

以编程方式分析Java堆转储文件

唐默
2023-03-14
问题内容

我想编写一个程序(最好在Java中),以分析和分析Java堆转储文件(由jmap创建)。我知道已经有很多很棒的工具(jhat,eclipse的MAT等),但是我想从特定的角度分析应用程序中的堆。

在哪里可以阅读有关堆转储文件的结构,如何读取该文件的示例等?找不到有用的搜索内容…

非常感谢。


问题答案:

我不熟悉jhat,但是Eclipse的MAT是开源的。他们的SVN链接可用,也许您可​​以查看它们的解析器,甚至可以使用它。



 类似资料:
  • 我想写一个程序(最好是在java中),它将解析和分析一个java堆转储文件(由jmap创建)。我知道有很多很棒的工具已经这样做了(jhat,eclipse的MAT,等等),但是我想从一个特定的角度来分析堆到我的应用程序。 我在哪里可以阅读堆转储文件的结构,示例如何阅读它,等等?没有找到任何有用的搜索... 非常感谢。

  • 问题内容: 我需要以编程方式计算给定jar文件中已编译类,接口和枚举的数量(因此我需要三个单独的数字)。哪个API对我有帮助?(我不能使用第三方库。) 我已经尝试过非常棘手的方案,这似乎并不总是正确的。即,我将每个ZipEntry读入byte [],然后将结果提供给我的自定义类加载器,该加载器扩展了标准CalssLoader并将此byte []发送到ClassLoader.defineClass(

  • 为了以编程方式分析。java文件,我刚刚开始玩Soot。从我所读到的内容来看,Soot似乎是一个非常强大的源代码分析工具,但我在网上找到的大多数材料都是将其用作命令行工具。 我需要以编程方式从给定目录中的。java文件加载类,构造程序依赖图(PDG)并进行一些程序切片。我仍然不确定是否Soot提供切片,但我可以实现自己一旦我有PDG。 为了开始,我尝试使用下面的代码: 然而,它不起作用。它在调用中

  • 在我的工作中,我们遇到了一个很难再现OOM的问题。或者,更准确地说,它很容易在一个系统上复制,使该系统无法使用,但在其他任何地方复制都很困难,给定相同的输入。 应用程序正在使用服务包装器作为服务运行。我们确实通过在OOM上输出堆转储文件的选项更改了配置以启动它,但不幸的是,它们被截断了,很可能是由于服务包装器在写入文件时超时并终止了进程。这是显而易见的,因为最大内存被设置为1GB,hprof文件小

  • Eclipse memory analyzer拒绝打开文件,我不确定应该使用哪个工具,或者应用哪个转换才能使它们与MAT一起工作。 不幸的是,到目前为止,我对这个问题的搜索结果被基本教程所污染,即“如何打开。heapdump文件”从本质上得到了“如何分析堆转储”的结果。 从下面的评论中编辑 使用VisualVM打开→不允许打开文件 使用JHat打开→抱怨神奇的数字(显然需要另一种二进制格式,可能是

  • 我正在经历内存泄漏,这里有一些细节。 在泄漏后, null null 我很惊讶顶部、堆转储大小和实际堆大小之间的差异。我猜测top和heap之间的区别是垃圾收集器堆和本地堆区域的可能性。但是,为什么堆转储文件大小和实际堆大小(来自eclipse MAT analyzer)会不同呢? 对这个问题有什么见解吗? 更新/回答 一些建议是使用jcmd(https://docs.oracle.com/jav