JVM按照其存儲數據的內容將所需內存分配為堆區與非堆區兩個部分:所謂堆區即為通過new的方式創建的對象(類實例)所占用的內存空間;非堆區即為代碼、常量、外部訪問(如文件訪問流所占資源)等。然而雖然java的垃圾回收機制雖然能夠很好的解決內存浪費的問題,但是這種機制也僅僅的是回收堆區的資源,而對於非堆區的資源就束手無策了,針對這樣的資源回收只能憑借開發人員自身的約束來解決(堆區有java回收機制、非堆區需要開發人員能夠很好的解決)。
-Xms256m -Xmx256m -XX:PermSize=64M -XX:MaxNewSize=64m -XX:MaxPermSize=256m
首先對着幾個字段值作出解釋:
1、-Xms:是初始化堆內存值;
2、-Xmx:是堆內存最大值。
這兩個值是tomcat服務器內存分配是動態的最好體現,剛啟動時系統給tomcat分配的內存為-Xms值,當項目占用的內存達到初始化內存的一定比例后(百度上說是80%,這點未驗證)才會將給tomcat分配-Xmx大小的內存,反之亦然當項目占用的內存降至-Xmx的40%時,系統會釋放部分內存,又將-Xms大小的內存划分給tomcat服務器。
-XX:PermSize和-XX:MaxPermSize是初始化永久保存區,原理同內存是一樣的。至於-XX:MAxNewSize是什么意思,暫時還不清楚,但看到有要求這個值的大小應該設置為-Xmx的1/4。