java.lang.OutOfMemoryError: Java heap space異常解決方法。

異常:使用Java程序從數據庫中查詢大量的數據時出現異常:java.lang.OutOfMemoryError: Java heap space

##################################################################################################################

在JVM中如果98%的時間是用於GC且可用的 Heap size 不足2%的時候將拋出此異常信息。

JVM堆的設置是指java程序運行過程中JVM可以調配使用的內存空間的設置.

JVM在啓動的時候會自動設置Heap size的值,其初始空間(即-Xms)是物理內存的1/64,最大空間(-Xmx)是物理內存的1/4。可以利用JVM提供的-Xmn -Xms -Xmx等選項可進行設置。
例如:java -jar -Xmn16m -Xms64m -Xmx128m MyApp.jar

如果Heap Size設置偏小,除了這些異常信息外,還會發現程序的響應速度變慢了。GC佔用了更多的時間,而應用分配到的執行時間較少。

Heap Size 最大不要超過可用物理內存的80%,一般的要將-Xms和-Xmx選項設置爲相同,而-Xmn爲1/4的-Xmx值。
Heap size的 -Xms -Xmn 設置不要超出物理內存的大小。否則會提示“Error occurred during initialization of VM Could not reserve enough space for object heap”。

##################################################################################################################

一:tomcat解決辦法:

tomcat_home/bin下catalina.bat(win)或catalina.sh(linux)執行代碼前加上:set JAVA_OPTS=%JAVA_OPTS% -Xms128m -Xmx512m

二:eclipse中解決辦法:

eclipse 有啓動參數裏設置jvm大小,因爲eclipse運行時自己也需要jvm,所以eclipse.ini裏設置的jvm大小不是具體某個程序運行時所用jvm的大小, 這和具體程序運行的jvm大小無關。

那麼怎麼才能設置某個程序的jvm大小呢(當然控制檯運行的話不會存在這個問題,如:java -Xms256m -Xmx1024m classname,這樣就可以把 當前程序的jvm大小給設定)?

因爲eclipse裏默認的一個程序的jvm配置爲:-Xms8m -Xmx128m,所以我們的處理耗內存比較大時需要手動調整一下,以便不會內存溢出。具體 的設置方法爲:

選中被運行的類,點擊菜單‘Run as ->Open Run Dialog...’,選擇(x)=Argument標籤頁下的vm arguments框裏輸入 -Xmx512m, 保存運行就ok了


發佈了30 篇原創文章 · 獲贊 4 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章