Java

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          // 设置JVM初始化堆内存大小 
 -Xmx          // 设置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

继续实验的精神