matlab调用Java程序时出现 Java.lang.OutOfMemoryErrot: GC overhead limit exceeded

时间:2022-03-01 15:24:57

matlab调用Java程序时出现

matlab调用Java程序时出现 Java.lang.OutOfMemoryErrot: GC overhead limit exceeded


java.lang.OutOfMemoryError: GC overhead limit exceeded
JDK1.6.0_37和JDK_1.7.0_60版本,这2个版本中JVM默认启动的时候-XX:+UseGCOverheadLimit,即启用了该特性。这其实是JVM的一种推断,如果垃圾回收耗费了98%的时间,但是回收的内存还不到2%,那么JVM会认为即将发生OOM,让程序提前结束。当然我们可以使用-XX:-UseGCOverheadLimit,关掉这个特性。

解释: JDK6新增错误类型。当GC为释放很小空间占用大量时间时抛出。
一般是因为堆太小。导致异常的原因:没有足够的内存。


解决方案1如下:

  1. 可以添加JVM的启动参数来限制使用内存
:-XX:-UseGCOverheadLimit

在linux服务器中,重启tomcat时在其.sh文件中某行加入

-XX:-UseGCOverheadLimit

参数即可

若是matlab调用的Java程序的话,可

在 $MATLAB\bin\$ARCH 路径下新建java.opts文件.
MATLAB是根路径,例如D:\CMWang\MATLABR2014bARCH是系统架构.例如win64,则在D:\CMWang\MATLABR2014b\bin\win64下新建java.opts文件.
用记事本打开java.opts文件,输入:

-XX:-UseGCOverheadLimit

详细解决方案见

matlab内存溢出的解决方案

解决方案2如下

调节matlab对Java虚拟机的内存分配。

matlab java.lang.OutOfMemoryError


其他的出现的异常情况如下
java.lang.*Error:(很少)
java.lang.OutOfMemoryError:heap space(比较常见)
java.lang.OutOfMemoryError: PermGen space (经常出现)
java.lang.OutOfMemoryError: GC overhead limit exceeded(某项操作使用大量内存时发生)

解决方案见参考文献。

参考主页
http://m.blog.csdn.net/article/details?id=7043725

http://blog.csdn.net/aitangyong/article/details/41180211

http://java-boy.iteye.com/blog/463454