java - 如何在java中捕获没有数据的堆转储

标签 java heap-memory heap-dump

我已经为我的java程序设置了-Xmx100g(我必须这样做),现在我怀疑程序中存在内存泄漏,每次迭代捕获和加载100GB堆转储需要两个多小时(当我更改某些内容时)在代码中并想检查它是否通过堆转储分析修复了内存泄漏)。堆的大部分是数据(例如一半是文本文件内容),在分析堆时我真的不关心对象内容。

那么我如何跳过转储堆数据并获得尽可能小的堆转储以进行内存泄漏分析(仅对象的元数据而不是它们的值)?

最佳答案

如果堆转储时间过长,请使用 -Xmx... 减小堆大小。

如果你有内存泄漏,那么你是否需要 100GB 的堆来寻找证据是值得怀疑的。所以减少它。

So how can i skip dumping heap data and have the smallest possible heap dump for memory leak analysis (just Object's metadata and not their values)?

我认为这是不可能的。此外,在很多情况下,正是这些值(例如引用链)允许您/分析器识别泄漏对象的来源。

关于java - 如何在java中捕获没有数据的堆转储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54264531/

相关文章:

java - 如何检查图像是否太大而无法打开?

java - 运行 Java 代码时内存不足

java - 在 visualvm 堆转储中, "Local Variable"之后的线程数是多少?

java - Java 中的初始 ArrayList 大小取决于内存?

java - 这两种方法在 java 中 sleep 执行的区别

java - 如何在 Delphi 中调试从 Java 调用的 DLL?

java - 如何在 IntelliJ 中分析堆转储? (内存泄漏)

java - 基于角色的授权 REST API

Java 使用的堆与分配的对象大小

java - 如何从 Java 堆转储中提取 HashMap