天天看點

java hashmap 記憶體_如何擷取 java hashmap占用存儲空間空間大小

本文簡明概要地說明了java程式的占用記憶體構成

對象(Objects)

類(Classes)

線程(Theads)

本地資料結構(Native data structures)

本地代碼(Native code)

每個因素對記憶體占用的影響又會随着應用程式、運作環境和系統平台的不同而變化,那怎樣計算總的記憶體占用量?是的,想得到一個準确的數字不是那麼容易,因為你很難控制本地(Native)部分。你能控制的部分隻有堆大小:-Xmx,類占用的記憶體:-XX:MaxPermSize,還有線程棧:-Xss控制每個線程占用的記憶體。注意當把棧大小設定的太小時會導StackOverflow異常、程式出錯。是以,計算公式為:

(-Xmx)+(-XX:MaxPermSize)+線程數*(-Xss)+其它記憶體

其它記憶體部分取決于本地代碼占用的記憶體,如NIO、Socket緩沖區、JNI等。它一般大約是JVM記憶體的5%左右。是以假設我們有下面的JVM參數和100個線程:

-Xmx1024m-XX:MaxPermSize=256m-Xss512k

那麼JVM程序至少會占用記憶體數量為:1024m+256m+100*512k+(0.05*1330m)=1396.5m

我一般使用(1.5*堆最大值)來作為一個近似值表示一個Tomcat程序會需要的最小記憶體,如果你有需要增加MaxPermSize到256M以上的應用這個值可以更大些。

取消

評論