JVM內存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m

在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。

因此,合理的內存分配是程序正常穩定的運行的基礎。不然內存溢出可就麻煩了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章