1. 程式人生 > >JVM記憶體分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m

JVM記憶體分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m

原文地址:https://blog.csdn.net/u012882327/article/details/69525166

版權宣告:博主也花了很多的心思歸納整理才分享給大家,轉載請註明出處。 https://blog.csdn.net/u012882327/article/details/69525166

在linux環境下配置專案執行環境時,部署的人員都會分配一下記憶體,以保證程式正常的執行。其實在開發的時候(window系統),就已經涉及到記憶體分配了,只是這些引數有預設值,因此一直沒有去重視它。 
以Myeclipse為例,在Preferences->Java->Installed JREs下面,就有設定jvm記憶體分配。 
這裡寫圖片描述

這裡我們就可以配置記憶體,一般我們見到的都是

-Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m

linux中一般為:
-vmargs -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m

但是這一串究竟是什麼意思,這裡就給大家講解一下。 
按照官方的說法:Java 虛擬機器具有一個堆(Heap),堆是執行時資料區域,所有類例項和陣列的記憶體均從此處分配。堆是在 Java 虛擬機器啟動時建立的,在JVM中堆之外的記憶體稱為非堆記憶體(Non-heap memory)。

簡單的說就是:堆是java程式碼可及的記憶體,開發人員寫的東西都是堆分配的記憶體(底層實現除外)。而非堆記憶體則是JVM自己用的,比如JVM內部處理或優化,垃圾處理,常數池等。

堆的記憶體分配用-Xms和-Xmx

-Xms分配堆最小記憶體,預設為實體記憶體的1/64;-Xmx分配最大記憶體,預設為實體記憶體的1/4。

非堆記憶體分配用-XX:PermSize和-XX:MaxPermSize

-XX:PermSize分配非堆最小記憶體,預設為實體記憶體的1/64;-XX:MaxPermSize分配最大記憶體,預設為實體記憶體的1/4。

因此,合理的記憶體分配是程式正常穩定的執行的基礎。不然記憶體溢位可就麻煩了。