java - 有没有一个软件可以实时查看JVM堆内存中对象的变化?

标签 java jvm heap-memory trace

假设您有一个正在运行的 Java 应用程序,并且您想要检查单击按钮会更改哪些对象属性以及 JVM 堆内存中的位置。在一个小程序中,您可以逐步调试单击,但如果它是一个非常大的程序,这可能需要很多时间。那么是否有一个 JVM 监视器可以记录并显示此类事件发生后堆中的变化。我知道我可以在事件发生之前和之后进行堆转储,然后进行比较,但我想问是否有更智能的方法。类似于 Windows 上的 RegMon 或 Filemon,但适用于 Java JVM。谢谢:)

最佳答案

实际上,采取堆转储"is"一种智能方式,因为人们必须明白(尤其是在 GUI 框架中)单击将改变的不仅仅是按钮参数。

这里面涉及到很多东西。 您可能想要使用内置的 Eclipse 调试器,它允许您跟踪特定变量以及整个对象的更改。

如果您对内部结构更感兴趣,我可以推荐 jvisualvm,它默认捆绑在 jdk 中。它将附加到热点 JVM 实例以监视其内部。

或者:

  • http://visualvm.java.net/ - 用于一般 JVM 跟踪的多功能工具。
  • https://eclipse.org/mat/ - 出色的内存分析器,例如可以进行两次两次堆转储,并清楚地向您显示发生了什么变化<<--- 可能是您正在寻找的内容

关于java - 有没有一个软件可以实时查看JVM堆内存中对象的变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28583535/

相关文章:

Java - 奇怪的堆空间错误不断被抛出

java - 我的 Euclid 算法运行非常缓慢

java - java swing对象之间的细微差别

Android Studio错误: “Environment variable does not point to a valid JVM installation”

java读取200mb文件,加载到内存中时,需要多少内存?

c++ - 巨大的内存分配 : stack vs heap

java - 是否可以使用Alfresco作为JCR框架?

java - 从 Jlist 保存项目

java - 有没有办法在 Java 应用程序中完全禁用 RMI?

java - 澄清新 JVM 内存参数 InitialRAMPercentage 和 MinRAMPercentage 的含义