我为我的Java程序设置了-Xmx100g(我必须这样做),因为我怀疑程序中存在内存泄漏,在每次迭代中捕获和加载100GB的堆转储都需要两个多小时(当我更改代码并想要通过堆转储分析检查它是否解决了内存泄漏问题)。大部分堆是数据(例如,一半是文本文件内容),在分析堆时,我真的不在乎对象内容。
那么,如何跳过转储堆数据并进行最小的堆转储以进行内存泄漏分析(只是对象的元数据而不是它们的值)?
最佳答案
如果堆转储的时间太长,请使用-Xmx...
减小堆的大小。
如果存在内存泄漏,则需要100GB的堆来查找证据是可疑的。所以减少它。
那么,如何跳过转储堆数据并进行最小的堆转储以进行内存泄漏分析(只是对象的元数据而不是它们的值)?
我认为不可能。此外,在很多情况下,值(例如参考链)使您/探查器能够识别泄漏对象的来源。