使用以下命令按堆疊檢查記憶體使用情況:
jcmd $pid VM.native_memory summary
我可以看到保留的記憶體與已提交的記憶體不同。
-
Thread (reserved=18561KB, committed=1085KB) (thread #18) (stack: reserved=18476KB, committed=1000KB) (malloc=63KB #99) (arena=22KB #35)
保留大約 1MB(堆疊的默認值)。承諾實際上是物理保留。我讀到java在沒有完全使用時為堆疊保存記憶體。
像 top 這樣運行命令我可以看到剛剛提交的使用情況。
為了保留此記憶體而不被 RSS(linux 記憶體測量)統計資訊計算,java/SO 做了什么?
由于沒有物理保留,其他行程是否可以使用此記憶體?
注:jdk11 SO Linux
uj5u.com熱心網友回復:
為了保留此記憶體而不被 RSS(linux 記憶體測量)統計資訊計算,java/SO 做了什么?
這種“預留”是基于虛擬記憶體的概念。JVM 呼叫mmap以保留地址空間。最初,這些地址只是沒有物理頁面支持的數字。在第一次訪問虛擬頁面時,會發生頁面錯誤,作業系統通過分配后備存盤(物理 RAM 或交換空間)來處理它。
由于沒有物理保留,其他行程是否可以使用此記憶體?
簡而言之,是的。更長的答案 - 具體取決于作業系統設定vm.overcommit_memory和vm.overcommit_ratiosysctls。默認設定允許過度使用 - 即可以分配比可用物理 RAM 交換更多的虛擬記憶體(因為應用程式通常不會使用它們保留的所有虛擬記憶體)。
uj5u.com熱心網友回復:
您需要了解,在任何現代作業系統中,“記憶體”都是虛擬的。
“保留”記憶體實際上只是分配給特定用途的地址空間。這主要意味著對跟蹤地址空間使用的資料結構進行一些調整。
“承諾”的記憶更加搖擺不定。大多數情況下,它只是意味著根據可用的最大提交的一些概念來跟蹤可能需要的物理記憶體。通常沒有概念,此時實際的物理 RAM 以某種方式分配給行程。最多可以保留頁面檔案空間。
(如果您想要實際的確定 RAM,則需要將已提交的頁面“固定”到物理記憶體中)。
在觸摸頁面之前不會分配實際的 RAM;即使在那之后,它也可以被分頁虛擬記憶體的動態再次帶走,部分取決于硬體上發生的其他事情。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/439004.html
上一篇:apt按多個欄位顯示過濾器
