一.java.lang.OutOfMemoryError:Java heap space:
解决方法:
1.检查程序,看是否有死循环或不必要地重复创建大量对象
2.修改这两个参数来增加堆内存 -Xms3062m 设置堆初始内存 -Xmx3062m 设置堆最大内存
二.java.lang.OutOfMemoryError: PermGen space:
这种是方法区内存不够,可通过调整JVM的配置:
-XX:MaxPermSize=128m
-XX:PermSize=128m
三.java.lang.StackOverflowError
这也内存溢出错误的一种,即线程栈的溢出,要么是方法调用层次过多(比如存在无限递归调用),要么是线程栈太小。
优化程序设计,减少方法调用层次;调整-Xss参数增加线程栈大小。
四.java.lang.OutOfMemoryError: Directbuffermemory
调整-XX:MaxDirectMemorySize=参数,如添加JVM配置:
-XX:MaxDirectMemorySize=128m 如果不指定,则默认与Java堆最大值(-Xmx)相同
五.java.lang.OutOfMemoryError:unable to create new native thread
本地方法栈空间不足以创建额外的线程,要么是创建的线程过多,要么是本地方法栈空间确实小了。
1.通过-Xss启动参数减少单个线程栈大小,这样便能开更多线程(当然不能太小,太小会出现StackOverflowError);
2.通过-Xms-Xmx两参数减少Heap大小,将内存让给Stack(前提是保证Heap空间够用)。
注:本文汇总互联网多篇文章与本人相关实践经验