導致OutOfMemoryError異常的常見原因有以下幾種:
- 內存中加載的數據量過於龐大,如一次從數據庫取出過多數據;
- 集合類中有對對象的引用,使用完後未清空,使得JVM不能回收;
- 代碼中存在死循環或循環產生過多重複的對象實體;
- 使用的第三方軟件中的BUG;
- 啓動參數內存值設定的過小;
此錯誤常見的錯誤提示:
- 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
解決方法:
增加jvm的內存大小。
對resin容器,在bin文件夾下創建一個startup.bat文件,內容如下:
@echo off
call "httpd.exe" "-Xms128M" "-Xmx256M"
:end
當然上面不是根本的解決方法,優化程序,增加程序健壯性纔是根本方法,這需要開發者在編碼階段就注意。