matlab调用Java程序时出现
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如下:
- 可以添加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.StackOverflowError:(很少)
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