Java堆转储(hprof文件)比驻留内存小得多

时间:2016-05-01 08:06:35

标签: java garbage-collection heap-memory

运行top时看到我的RES是4.7GB,这很好,因为我设置了-Xmx8g,但是当我将它转储到hprof文件时,我得到了大约半个gig文件。

Isn&t认为包含所有内存? 顺便说一句,即使我强制GC(使用jcmd)我仍然看到4.7G常驻。

1 个答案:

答案 0 :(得分:0)

堆转储文件(hprof)不是内存转储,而是对象堆转储。它只包含java对象。

堆转储文件不包含 - 非堆内存区域(例如代码缓存,元空间等) - 转储中不包含某些堆对象(例如类) - 保留但未在堆中使用的免费区域

在您的情况下,您可能有很多未使用的堆空间。 GC不会将已用空间返回到OS,因此RES大小保持为4.7G