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

如何查看Java堆中的内容?

汪和悌
2023-03-14
问题内容

我设法在正在开发的Java应用程序中获得内存“泄漏”。运行我的JUnit测试套件时,我会随机退出内存异常(java.lang.OutOfMemoryError)。

我可以使用哪些工具来检查我的Java应用程序的堆,以查看所有堆中正在使用的工具,以便可以确定哪些保留了对应该能够进行垃圾收集的对象的引用。


问题答案:

VisualVM包含在Java的最新版本中。您可以使用它来创建堆转储,并查看其中的对象。

另外,您还可以使用jmap(在jdk / bin目录中)创建一个heapdump命令:

jmap -dump:format=b,file=heap.bin <pid>

您甚至可以使用它来快速获取所有对象的直方图

jmap -histo <pid>

我可以推荐使用Eclipse Memory
Analyzer(http://eclipse.org/mat)对堆转储进行高级分析。它使您可以精确地找出为什么某个对象或一组对象仍然存在。这是一个博客条目,向您显示Memory
Analyzer可以做什么:http :
//dev.eclipse.org/blogs/memoryanalyzer/2008/05/27/automated-heap-dump-
analysis-finding-memory-leaks-with-one-
点击/




 类似资料:
  • 这是我的东西? 如何阅读SequelizeMeta的内容? 谢啦

  • 我收到一个错误消息,说从数据库返回的结果集内缺少某个< code>string。现在我有一个问题:我怎样才能看到结果集中的内容? google上可用的示例是显式方法,如或,但这些方法假设您知道您在寻找什么。我真正需要的是-查看中有哪些元素可用。 就像当我发出命令时,它会向我显示某种带有变量名的映射——这可能吗? 编辑: 如果有用,下面是一段代码: 错误:

  • 问题内容: 是否有一个TSQL脚本可以让我看到约束的内容。我发现了一个有关Oracle的问题,但我需要一个TSQL脚本。 如何在Oracle上查看检查约束的内容 我知道sys.check_constraints,但是对于所有对象,“定义”都返回null。 问题答案: 其他方式 用于检查约束 对于默认约束 还有另一种方式

  • 我阅读了其他帖子但无法重现。那么如何在调试调用堆栈期间查看哪个方法调用了最近的方法呢?

  • 问题内容: 本文介绍如何在Java VisualVM中查看内存分配堆栈跟踪:http : //rejeev.blogspot.de/2009/04/analyzing-memory-leak-in- java.html 简而言之,请在Java VisualVM选项中定义一个自定义预设,然后选中 “ 内存设置”选项卡中的 “记录分配堆栈跟踪”复选框 。 现在,当我选择该自定义预设并开始内存分析时,我

  • 问题内容: 我做了一个码头工人拉,可以列出下载的图像。我想看这张图片的内容。在网上进行了搜索,但没有直接答案。 问题答案: 您可以使用该图像运行一个交互式外壳容器,并浏览该图像包含的内容。 例如: 或关注带有 或者,如果您想查看图像的构建方式,即图像中的步骤,则可以: 步骤将被登录到文件中。