溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Java內(nèi)存設(shè)置詳解(含內(nèi)存溢出問題的解決)

發(fā)布時(shí)間:2020-07-31 20:51:28 來源:網(wǎng)絡(luò) 閱讀:425 作者:wx5d78c87dd0584 欄目:編程語言

一、常見的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
向AI問一下細(xì)節(jié)

免責(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)容。

AI