首页 > 代码库 > java.lang.OutOfMemoryError

java.lang.OutOfMemoryError

there are two situations in this error, one is Java heap space and solution as below:
a.在Eclipse里选:Window->Preference->InstalledJREs->选中->Edit,

在Default VM Arguments里输入-Xms256m -Xmx1024m,表示最小内存256M,最大1G,然后运行就可以了。
 图片

 b.Run->Run Configurations...找到相应的运行配置,在VM arguments里加入:-Xms256m -Xmx1024m

JVM 堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设置.JVM在启动的时候会自动设置Heap size的值,其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。可以利用JVM提供的-Xmn -Xms -Xmx等选项可进行设置.
如:-Xms64m -Xmx128m
如果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”。

another one is PermGen space, solution as below:
a.Run->Run Configurations...找到相应的运行配置,在VM arguments里加入:-XX:PermSize=128M -XX:MaxPermSize=128m

b.在eclipse.ini配置文件中加上以下两行
-XX:PermSize=128M 
-XX:MaxPermSize=128M

PermGen space的全称是Permanent Generation space,是指内存的永久保存区域。
OutOfMemoryError: PermGen space从表面上看就是内存益出,解决方法也一定是加大内存。
说说为什么会内存益出:
1.这一部分用于存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域,它和和存放Instance的Heap区域不同。
2.GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误。这种错误常见在web服务器对JSP进行pre compile的时候。
如果你的WEB APP下都用了大量的第三方jar,其大小超过了jvm默认的大小(4M)那么就会产生此错误信息了。
解决方法:手动设置MaxPermSize大小.

当前项目中环境配置如下:
图片



本文出自 “六度空间” 博客,请务必保留此出处http://jasonwalker.blog.51cto.com/7020143/1416716