為什么jvm 提交的內存比實際進程占用的內存更大


RSS:常駐內存集,為進程分配的內存大小,包括共享庫的內存,不包括進入交換分區的內存,這里RSS就是實際進程占用的內存。

used Heap: jvm中活動對象占用的內存,當used 接近committed的時候,heap就會grow up,-Xmx設置了Commit上限。

Commited: 表示可供java虛擬機使用的內存量,提交的內存可能會隨時間的推移而變化(增加或者減少)。JVM可能會向OS釋放內存,同時已提交的內存可能小於Init,已提交的內存將始終大於或等於Used Heap(ORACLE 官方文檔中可以看到)。init是啟動時后JVM向OS申請的內存,max是能夠使用的最大邊界值。注意這里說的都是虛擬內存,所以理論上整個操作系統commited的內存為物理內存加上交換空間的大小,換句話說如果commited超過物理內存的話,多余的部分就會被換出到磁盤。這也就是為什么jvm提交的內存可能會比實際進程占用的內存更大的原因。

JDK 1.8中默認的GC收集器為Parallel GC,這個GC收集器在GC之后不會將內存返還給OS,所以GC之后進程內存占用不會降低。

 

圖片復制自:http://www.importnew.com/14486.html

未使用區:對於普通進程來說,這個區域被可用於堆和棧空間的申請及釋放,每次堆內存分配都會使用這個區域,因此大小變動頻繁;對於JVM進程來說,調整堆大小及線程棧時會使用該區域,而堆大小一般較少調整,因此大小相對穩定。操作系統會動態調整這個區域的大小,並且這個區域通常並沒有被分配實際的物理內存,只是允許進程在這個區域申請堆或棧空間,在真正使用的時候就會與磁盤交換變為物理內存占用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM