JVM內存配置
JVM內存主要分為兩個部分,分別是PermanentSapce和HeapSpace。
PermantSpace主要負責存放加載的Class類級對象如class本身,method,field等反射對象,一般不用配置。
JVM的Heap區可以通過-X參數來設定。HeapSpace= {Old + NEW {= Eden , from, to } }
當一個URL被訪問時,內存申請過程如下:
- JVM會試圖為相關Java對象在Eden中初始化一塊內存區域
- 當Eden空間足夠時,內存申請結束。否則到下一步
- JVM試圖釋放在Eden中所有不活躍的對象(這屬于1或更高級的垃圾回收), 釋放后若Eden空間仍然不足以放入新對象,則試圖將部分Eden中活躍對象放入Survivor區
- Survivor區被用來作為Eden及OLD的中間交換區域,當OLD區空間足夠時,Survivor區的對象會被移到Old區,否則會被保留在Survivor區
- 當OLD區空間不夠時,JVM會在OLD區進行完全的垃圾收集(0級)
- 完全垃圾收集后,若Survivor及OLD區仍然無法存放從Eden復制過來的部分對象,導致JVM無法在Eden區為新對象創建內存區域,則出現”out of memory錯誤”
Xms/Xmx:定義NEW+OLD段的總尺寸,ms為JVM啟動時NEW+OLD的內存大小;mx為最大可占用的NEW+OLD內存大小。。在用戶生產環境上一般將這兩個值設為相同,以減少運行期間系統在內存申請上所花的開銷;
NewSize/MaxNewSize:定義單獨NEW段的尺寸,NewSize為JVM啟動時NEW的內存大小;MaxNewSize為最大可占用的NEW的內存大小。在用戶生產環境上一般將這兩個值設為相同,以減少運行期間系統在內存申請上所花的開銷;
Xms/Xmx和NewSize/MaxNewSize定義好后,OLD區間也自然定義完畢了,即OLD區初始大小=(Xms-NewSize),OLD區最大可占用大小=(Xmx-MaxNewSize);
PermSize/MaxPermSize:定義Perm段的尺寸,PermSize為JVM啟動時Perm的內存大小;MaxPermSize為最大可占用的Perm內存大小。在用戶生產環境上一般將這兩個值設為相同,以減少運行期間系統在內存申請上所花的開銷。
posted on 2019-08-01 16:44 paulwong 閱讀(389) 評論(0) 編輯 收藏 所屬分類: JVM