Java - Exception in thread java.lang.OutOfMemoryError: Java heap space

Exception in thread java.lang.OutOfMemoryError: Java heap space

又遇到一個OutOfMemoryError的問題。

這不知道遇到N百次了,只要放著讓程式過夜,就容易出現,

當問題出現,才好解決問題,上網查詢,

有一個人寫的應該可以

http://fanli7.net/a/JAVAbiancheng/JAVAzonghe/20120804/198671.html

但,基本上我有對專案設過-Xmx1024m了。 (Run => Run Configurations => (x)= Arguments => VM arguments: -Xmx1024m)

這次我可能又要再嘗試使用-Xms1024m試試

而這次我們要瞭解Xmx及Xms的意思到底是什麼(這次被強迫要去理解他一下不可)

看網路解

http://www.chinaunix.net/old_jh/26/152236.html

意思是

个人之见,欢迎指正: 
Xmx是java的一个选项,用来设置你的应用程序能够使用的最大内存数(看好,致使你的应用程序,不是整个jvm),如果你的程序要花很大内存的话,那就需要修改缺省的设置,比如配置tomcat的时候,如果流量啊程序啊都很大的话就需要加大这个值了,不过有一点是要记住的,不要大得超过你的机器的内存,那样你的机器会受不了的,到时候就死翘翘了。 
Xms是另一个设置内存的参数,用它来设置程序初始化的时候内存栈的大小,增加这个值的话你的程序的启动性能会得到提高。不过同样有前面的限制,以及受到xmx的限制。 
另外,一个操作系统通常都只使用jvm,这就是你说的“运行在同一个JVM中的程序”,不同的虚拟机的实现虽然千差万别,但是他们的运行模式都是一样的,只是性能有所不同罢了。

 -Xms <size>         // 設置JVM初始化堆內存大小 
 -Xmx <size>         // 設置JVM最大的堆內存大小

還有一個網路解不錯

https://stackoverflow.com/questions/37335/how-to-deal-with-java-lang-outofmemoryerror-java-heap-space-error-64mb-heap

介紹了一個JMP (Java Memory Profiler) 的東西。

http://www.khelekore.org/jmp/

有機會再來研究一下。

--------------

看到有一篇更深度的文章

http://javarevisited.blogspot.tw/2011/09/javalangoutofmemoryerror-permgen-space.html

裡面介紹了很多知識,並且告知解決方法,與參考書籍與文章

參考文章有

http://javarevisited.blogspot.tw/2014/07/top-5-java-performance-tuning-books.html

http://javarevisited.blogspot.tw/2011/05/java-heap-space-memory-size-jvm.html

參考書籍有

Java Performance 1st Edition

Java Performance: The Definitive Guide: Getting the Most Out of Your Code 1st Edition

 

介紹解決問題的說明如下:

How to solve java.lang.OutOfMemoryError: Java heap space


1) An easy way to solve OutOfMemoryError in java is to increase the maximum heap size by using JVM options "-Xmx512M", this will immediately solve your OutOfMemoryError. This is my preferred solution when I get OutOfMemoryError in Eclipse, Maven or ANT while building project because based upon size of project you can easily run out of Memory.here is an example of increasing maximum heap size of JVM, Also its better to keep -Xmx to -Xms ration either 1:1 or 1:1.5 if you are setting heap size in your java application

export JVM_ARGS="-Xms1024m -Xmx1024m"

2) The second way to resolve OutOfMemoryError in Java is rather hard and  comes when you don't have much memory and even after increase maximum heap size you are still getting java.lang.OutOfMemoryError, in this case, you probably want to profile your application and look for any memory leak. You can use Eclipse Memory Analyzer to examine your heap dump or you can use any profiler like Netbeans or JProbe. This is tough solution and requires some time to analyze and find memory leaks.

Read more: http://javarevisited.blogspot.com/2011/09/javalangoutofmemoryerror-permgen-space.html#ixzz4qdXAOBFn

並且介紹了一個偵測Memory 的Eclipse Memory Analyzer

http://www.eclipse.org/mat/

Java要到精,真不容易,繼續研究

 

------------

然後又發生問題,

繼續下一個文章

https://www.mkyong.com/eclipse/eclipse-java-lang-outofmemoryerror-java-heap-space/

追加eclipse.ini設定

-startu
openFile
-showsplash
        //...
-XX:MaxPermSize=512m
-Xms512m
-Xmx1024m
        //...
-Xdock:icon=../Resources/Eclipse.icns
-XstartOnFirstThread

繼續實驗的精神