运行top时看到我的RES
是4.7GB,这很好,因为我设置了-Xmx8g
,但是当我将它转储到hprof文件时,我得到了大约半个gig文件。
Isn&t认为包含所有内存? 顺便说一句,即使我强制GC(使用jcmd)我仍然看到4.7G常驻。
答案 0 :(得分:0)
堆转储文件(hprof)不是内存转储,而是对象堆转储。它只包含java对象。
堆转储文件不包含 - 非堆内存区域(例如代码缓存,元空间等) - 转储中不包含某些堆对象(例如类) - 保留但未在堆中使用的免费区域
在您的情况下,您可能有很多未使用的堆空间。 GC不会将已用空间返回到OS,因此RES大小保持为4.7G