java - 如何在不先进行垃圾收集的情况下在 Java 5 上进行堆转储?

标签 java garbage-collection heap-memory

我们有一个运行 Java 5 的长时间运行的服务器应用程序,对它进行分析我们可以看到随着时间的推移老年代增长缓慢。它已在完整 GC 上正确释放,但我希望能够使用堆转储查看 Eclipse MAT 中无法访问的对象。我已经使用 +XX:HeapDumpOnCtrlBreak 成功地获得了堆转储,但是 JVM 总是在转储堆之前执行 GC。显然这不会发生在 Java 6 上,但我们现在停留在 5 上。有什么办法可以避免这种情况吗?

最佳答案

使用 jconsole 或 visualvm 或 jmc 或 ... 其他 jmx 管理控制台。 在 com.sun.management 中打开 HotSpotDiagnostic。 选择方法dumpHeap 并输入两个参数:

  • 转储文件的路径
  • (true/false) 仅转储 Activity 对象。使用 false 转储所有对象。

请注意,转储文件将由您连接的 JVM 写入,而不是由 JVisualVM 写入,因此如果 JVM 在不同的系统上运行,它将写入该系统。

enter image description here

关于java - 如何在不先进行垃圾收集的情况下在 Java 5 上进行堆转储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1268336/

相关文章:

Java GC 问题 : How could an object become unreachable while one of its methods is still being executed?

android - setContentView后堆为30M

java - PySpark:java.lang.OutofMemoryError:Java 堆空间

java - 在 Java 编码中使用 @XmlAnyElement

c# - .NET 运行时错误 80131506 - 将 Lambda 传递给 native 函数

c# - 对象引用在多层异步等待操作中丢失

c++ - 为什么这个全局堆对象没有被释放?

java - 在java : java. lang.NumberFormatException中解析 float 时出现问题:对于输入字符串: "[60.0]"

java.lang.ClassCastException : java. lang.StackOverflowError 无法转换为 java.lang.Exception

java - 听起来不行吗? (仍然需要一个答案)