我已经为我的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/