解釋:
JVM堆的設置是指java程序運行過程中JVM可以調配使用的內存空間的設置。JVM在啟動的時候會自動設置Heapsize的值,其初始空間(即-Xms)是物理內存的1/64,最大空間(-Xmx)是物理內存的1/4。
可以利用JVM提供的-Xmn-Xms-Xmx等選項可進行設置。Heapsize的大小是YoungGeneration和TenuredGeneraion之和。在JVM中如果98%的時間是用于GC且可用的Heapsize不足2%的時候將拋出此異常信息。
提示:
HeapSize最大不要超過可用物理內存的80%,一般的要將-Xms和-Xmx選項設置為相同,而-Xmn為1/4的-Xmx值。JVM中最大堆大小有三方面限制:相關操作系統的數據模型(32-bt還是64-bit)限制;系統的可用虛擬內存限制;系統的可用物理內存限制。32位系統下,一般限制在1.5G~2G;64為操作系統對內存無限制。我在WindowsServer2003系統,3.5G物理內存,JDK5.0下測試,最大可設置為1478m。
?
參數匯總
-Xms:表示java虛擬機堆區內存初始內存分配的大小,通常為操作系統可用內存的1/64大小即可,但仍需按照實際情況進行分配。有可能真的按照這樣的一個規則分配時,設計出的軟件還沒有能夠運行得起來就掛了。-Xmx:表示java虛擬機堆區內存可被分配的最大上限,通常為操作系統可用內存的1/4大小。但是開發過程中,通常會將-Xms與-Xmx兩個參數的配置相同的值,其目的是為了能夠在java垃圾回收機制清理完堆區后不需要重新分隔計算堆區的大小而浪費資源。
一般來講對于堆區的內存分配只需要對上述-Xms和-Xmx兩個參數進行合理配置即可,但是如果想要進行更加精細的分配還可以對堆區內存進一步的細化,那就要用到下面的三個參數了-XX:newSize、-XX:MaxnewSize、-Xmn。當然這源于對堆區的進一步細化分:新生代、中生代、老生代。java中每新new一個對象所占用的內存空間就是新生代的空間,當java垃圾回收機制對堆區進行資源回收后,那些新生代中沒有被回收的資源將被轉移到中生代,中生代的被轉移到老生代。而接下來要講述的三個參數是用來控制新生代內存大小的.
-XX:newSize:表示新生代初始內存的大小,應該小于-Xms的值;
-XX:MaxnewSize:表示新生代可被分配的內存的最大上限;當然這個值應該小于-Xmx的值;
-Xmn:至于這個參數則是對-XX:newSize、-XX:MaxnewSize兩個參數的同時配置,也就是說如果通過-Xmn來配置新生代的內存大小,那么-XX:newSize=-XX:MaxnewSize=-Xmn,雖然會很方便,但需要注意的是這個參數是在JDK1.4版本以后才使用的
上面所述即為java虛擬機對外提供的可配置堆區的參數,接下來講述java虛擬機對非堆區內存配置的兩個參數:
-XX:PermSize:表示非堆區初始內存分配大小,其縮寫為permanentsize(持久化內存)-XX:MaxPermSize:表示對非堆區分配的內存的最大上限。
各種運行環境解決方案
手動設置Heapsize
Linux平臺
修改TOMCAT_HOME/bin/catalina.sh,在“cygwin=false”上一行加入如下參數:JAVA_OPTS="-Xms512m-Xmx512m-XX:PermSize=128m-XX:MaxPermSize=256m"
Windows平臺Tomcat安裝版第一種方式:
打開注冊表(命令:regedit),修改注冊表HKEY_LOCAL_MACHINE\SOFTWARE\ApacheSoftwareFoundation\TomcatServiceManager\Tomcat6\Parameters\Java\Options
在后面加上:-Xms512m-Xmx512m ? ??XX:PermSize=128m-XX:MaxPermSize=256m ??-Dcom.sun.management.jmxremote=true
第二種方式:
點擊應用“Tomcat6w.exe”,找到“Java”標簽,在“JavaOptions”添加以上參數
Windows平臺Tomcat解壓版
在文件catalina.bat文件中的第一行添加如下:
setJAVA_OPTS=-Xms512m-Xmx512m-XX:MaxNewSize=256m-XX:MaxPermSize=256m
- 前言
- spring事務(Transaction )報 marked as rollback-only異常的原因及解決方法
- 自己整理的編碼規范總結。(個人覺得很受用)
- spring事務常見問題、異常分析和解決方法
- 剖析OutOfMemoryError: PermGen space產生原因及解決方法
- 剖析java.lang.OutOfMemoryError: Java heap space產生原因及解決方法
- java中不同的ORM框架實現對數據庫批量插入數據庫的方式與技巧
- 解決java讀取大文件內存溢出問題、如何在不重復讀取與不耗盡內存的情況下處理大文件
- 不得不看的Java代碼性能優化總結
- 實現使用3des在頁面js加密,后臺java解密
- Java日志記錄的5條規則