Java 內(nèi)存溢出(java.lang.OutOfMemoryError)的常見情況和處理方式總結(jié)
http://outofmemory.cn/c/java-outOfMemoryError
導致OutOfMemoryError異常的常見原因有以下幾種:
內(nèi)存中加載的數(shù)據(jù)量過于龐大簿训,如一次從數(shù)據(jù)庫取出過多數(shù)據(jù);
集合類中有對對象的引用,使用完后未清空员辩,使得JVM不能回收搪缨;
代碼中存在死循環(huán)或循環(huán)產(chǎn)生過多重復的對象實體海蔽;
使用的第三方軟件中的BUG洪乍;
啟動參數(shù)內(nèi)存值設(shè)定的過星焱觥狂塘;
此錯誤常見的錯誤提示:
tomcat:java.lang.OutOfMemoryError: PermGen space
tomcat:java.lang.OutOfMemoryError: Java heap space
weblogic:Root cause of ServletException java.lang.OutOfMemoryError
resin:java.lang.OutOfMemoryError
java:java.lang.OutOfMemoryError
解決java.lang.OutOfMemoryError的方法有如下幾種:
一录煤、增加jvm的內(nèi)存大小。方法有: 1)在執(zhí)行某個class文件時候荞胡,可以使用java -Xmx256M aa.class來設(shè)置運行aa.class時jvm所允許占用的最大內(nèi)存為256M妈踊。 2)對tomcat容器,可以在啟動時對jvm設(shè)置內(nèi)存限度泪漂。對tomcat廊营,可以在catalina.bat中添加:
set CATALINA_OPTS=-Xms128M -Xmx256M
set JAVA_OPTS=-Xms128M -Xmx256M
或者把%CATALINA_OPTS%和%JAVA_OPTS%代替為-Xms128M -Xmx256M
3)對resin容器歪泳,同樣可以在啟動時對jvm設(shè)置內(nèi)存限度。在bin文件夾下創(chuàng)建一個startup.bat文件露筒,內(nèi)容如下:
@echo off
call "httpd.exe" "-Xms128M" "-Xmx256M"
:end
其中"-Xms128M"為最小內(nèi)存呐伞,"-Xmx256M"為最大內(nèi)存。
二慎式、 優(yōu)化程序伶氢,釋放垃圾。
主要包括避免死循環(huán)瘪吏,應該及時釋放種資源:內(nèi)存, 數(shù)據(jù)庫的各種連接癣防,防止一次載入太多的數(shù)據(jù)。導致java.lang.OutOfMemoryError的根本原因是程序不健壯掌眠。因此劣砍,從根本上解決Java內(nèi)存溢出的唯一方法就是修改程序,及時地釋放沒用的對象扇救,釋放內(nèi)存空間刑枝。 遇到該錯誤的時候要仔細檢查程序,嘿嘿迅腔,遇多一次這種問題之后装畅,以后寫程序就會小心多了。