2016-05-01 233 views
1

當運行top時看到我的RES是4.7GB,這很好,因爲我設置了-Xmx8g,但是當我將它轉儲到hprof文件時,我獲得了大約一半演出文件。Java堆轉儲(hprof文件)比常駐內存小得多

是不是包含所有內存? 順便說一句,即使我強制GC(使用jcmd),我仍然看到4.7G駐留。

+0

http://stackoverflow.com/questions/11666667/heapdump-size-vs-hprof-size – user2494817

+0

我認爲我的問題是相反的。我的hprof也很小,不包含所有對象。無論如何,在運行'GC.run'之後,它應該是免費的常駐內存,不是嗎? – Nati

+0

對此的解釋需要超過600個字符,因此要保持簡短:不一定。你可以嘗試一些他們在答案中解釋的方法,但如果他們不工作,我不知道該告訴你什麼(可能是驚人的壓縮?:)) – user2494817

回答

0

堆轉儲文件(hprof)不是內存轉儲,而是對象堆轉儲。它只包含java對象。

堆轉儲文件不包括 - 的存儲器非堆arreas(例如代碼高速緩存中,元空間,等等) - 一些堆中的對象(例如類)不包括在轉儲 - 保留自由區域但在不使用堆

在你的情況,你可能有很多未使用的堆空間。 GC不會將已用空間返回給操作系統,所以RES的大小仍然爲4.7G

相關問題