2 回答

TA貢獻(xiàn)1807條經(jīng)驗(yàn) 獲得超9個(gè)贊
VIRT
表示虛擬內(nèi)存 - 這是進(jìn)程的整個(gè)保留地址空間。RSS
是常駐集大小——在物理 RAM 中分配的虛擬地址空間部分。對于任何地址范圍(不僅是堆)RSS
是 的子集VIRT
,可能是完整的或空的。似乎您已經(jīng)探索過pmap
- 對于每個(gè)虛擬地址范圍,它顯示了物理分配內(nèi)存 (RSS) 的確切數(shù)量。操作系統(tǒng)在第一次訪問時(shí)延遲分配物理頁面。這就是為什么在相應(yīng)的頁面被讀取或?qū)懭胫?,即使已提交的?nèi)存也不是 RSS 的一部分。堆的大部分不在 RSS 中這一事實(shí)意味著堆的這一部分從未被觸及過。另請參閱此問題。
有一個(gè) JVM 選項(xiàng)
-XX:+AlwaysPreTouch
可以強(qiáng)制接觸堆的每一頁,從而使其成為 RSS 的一部分。嘗試java -Xms9G -Xmx9G -XX:+AlwaysPreTouch
。

TA貢獻(xiàn)1860條經(jīng)驗(yàn) 獲得超8個(gè)贊
是的 HEAP 是 RES(只要它適合主內(nèi)存)
This answer表明這
-Xms
是對GC的提示,在什么時(shí)候需要進(jìn)行完整的垃圾收集。使用我的本地 JVM 進(jìn)行測試,我可以確認(rèn)它不會(huì)立即保留內(nèi)存。您獲得的是您的 JVM 不會(huì)阻塞大量未使用的內(nèi)存,但會(huì)更快地達(dá)到您的下限,因?yàn)?GC 運(yùn)行較少。1 的回答:RES 總是包含所有的 HEAP
我的理解是您的選擇將實(shí)現(xiàn)您的意圖。您的應(yīng)用程序?qū)⒄加?9GB 內(nèi)存,然后更頻繁地啟動(dòng)垃圾收集。如果您需要更多優(yōu)化,還有其他選項(xiàng),例如
MinHeapFreeRatio
和 取決于所使用的垃圾收集器的選項(xiàng)。
您是否打印了 GC 日志并驗(yàn)證是否有問題?如果您看到在達(dá)到 9G 之前應(yīng)用程序啟動(dòng)時(shí)運(yùn)行了很多 GC,我會(huì)進(jìn)一步查看。如果在達(dá)到 9G 之前幾乎沒有運(yùn)行任何 GC,我會(huì)說一切都很好。
添加回答
舉報(bào)