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

时间:2019-01-19 06:08:01

标签: java heap-memory heap-dump

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

那么我该如何跳过转储堆数据,并进行最小的堆转储以进行内存泄漏分析(只是对象的元数据而不是它们的值)?

1 个答案:

答案 0 :(得分:1)

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

如果存在内存泄漏,则需要100GB的堆来查找证据是可疑的。所以减少它。

  

那么我该如何跳过转储堆数据,并进行最小的堆转储以进行内存泄漏分析(只是对象的元数据而不是它们的值)?

我认为不可能。此外,在很多情况下,正是值(例如参考链)使您/探查器能够识别泄漏对象的来源。