您好,登錄后才能下訂單哦!
一、常見的Java內(nèi)存溢出有以下三種:
1.java.lang.OutOfMemoryError: Java heap space ----JVM Heap(堆)溢出
JVM在啟動的時(shí)候會自動設(shè)置JVM Heap的值,其初始空間(即-Xms)是物理內(nèi)存的1/64,最大空間(-Xmx)不可超過物理內(nèi)存。
可以利用JVM提供的-Xmn -Xms -Xmx等選項(xiàng)可進(jìn)行設(shè)置。Heap的大小是Young Generation 和Tenured Generaion 之和。
在JVM中如果98%的時(shí)間是用于GC,且可用的Heap size 不足2%的時(shí)候?qū)伋龃水惓P畔ⅰ?/p>
解決方法:手動設(shè)置JVM Heap(堆)的大小。
2.java.lang.OutOfMemoryError: PermGen space ---- PermGen space溢出
PermGen space的全稱是Permanent Generation space,是指內(nèi)存的永久保存區(qū)域。
為什么會內(nèi)存溢出,這是由于這塊內(nèi)存主要是被JVM存放Class和Meta信息的,Class在被Load的時(shí)候被放入PermGen space區(qū)域,它和存放Instance的Heap區(qū)域不同,sun的 GC不會在主程序運(yùn)行期對PermGen space進(jìn)行清理,所以如果你的APP會載入很多CLASS的話,就很可能出現(xiàn)PermGen space溢出。
解決方法: 手動設(shè)置MaxPermSize大小
3.java.lang.StackOverflowError ---- 棧溢出
棧溢出了,JVM依然是采用棧式的虛擬機(jī),這個(gè)和C和Pascal都是一樣的。函數(shù)的調(diào)用過程都體現(xiàn)在堆棧和退棧上了。
調(diào)用構(gòu)造函數(shù)的 “層”太多了,以致于把棧區(qū)溢出了。
通常來講,一般棧區(qū)遠(yuǎn)遠(yuǎn)小于堆區(qū)的,因?yàn)楹瘮?shù)調(diào)用過程往往不會多于上千層,而即便每個(gè)函數(shù)調(diào)用需要 1K的空間(這個(gè)大約相當(dāng)于在一個(gè)C函數(shù)內(nèi)聲明了256個(gè)int類型的變量),那么棧區(qū)也不過是需要1MB的空間。通常棧的大小是1-2MB的。通常遞歸也不要遞歸的層次過多,很容易溢出。
解決方法:修改程序。
二、方法具體步驟
1.linux下的tomcat:
修改TOMCAT_HOME/bin/catalina.sh 位置cygwin=false前。
JAVA_OPTS="-server -Xms256m -Xmx512m -XX:PermSize=64M -XX:MaxPermSize=128m"
2.如果tomcat 5 注冊成了windows服務(wù),以services方式啟動的,則需要修改注冊表中的相應(yīng)鍵值。
修改注冊表HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Tomcat Service Manager\Tomcat5\Parameters\Java,右側(cè)的Options
原值為:
-Dcatalina.home="C:\ApacheGroup\Tomcat 5.0"
-Djava.endorsed.dirs="C:\ApacheGroup\Tomcat 5.0\common\endorsed"
-Xrs
加入
-Xms256m -Xmx512m
重起tomcat服務(wù),設(shè)置生效
**3.如果tomcat 6 注冊成了windows服務(wù),或者windows2003下用tomcat的安裝版,在/bin/tomcat6w.exe里修改就可以了 。
4.如果要在myeclipse中啟動tomcat,上述的修改就不起作用了,可如下設(shè)置:
Myeclipse->preferences->myeclipse->servers->tomcat->tomcat×.×->JDK面板中的
Optional Java VM arguments中添加:
-Xms256m -Xmx512m -XX:PermSize=64M -XX:MaxPermSize=128m
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。