状况一:java.lang.OutOfMemoryError: Java heap spacejava
缘由:java堆内存不足,多是真的不足,也多是程序中有死循环多线程
方案:一、调整JVM参数-Xms2048m -Xmx2048mapp
二、定位死循环代码jvm
状况二:java.lang.OutOfMemoryError: GC overhead limit exceeded优化
缘由:JDK6新增错误类型,当GC为释放很小空间占用大量时间时抛出;通常是由于堆过小,致使异常的缘由,没有足够的内存spa
方案:一、查看系统中是否有使用大内存的代码或者死循环线程
二、添加jvm参数配置,来限制使用内存:-XX:-UseGCOverheadLimit设计
状况三:java.lang.OutOfMemoryError: PermGen space递归
缘由:Perm区的内存不足内存
方案:-XX:MaxPermSize=128m -XX:PermSize=128m
状况四:java.lang.OutOfMemoryError: Direct buffer memory
缘由:调整-XX:MaxDirectMemorySize= 参数
方案:-XX:MaxDirectMemorySize=128m
状况五:java.lang.OutOfMemoryError: unable to create new native thread
缘由:Stack空间不足以建立额外的线程,要么是建立的线程过多,要么是Stack空间确实小了
方案:因为JVM没有提供参数设置总的stack空间大小,但能够设置单个线程栈的大小;而系统的用户空间一共是3G,除了Text/Data/BSS /MemoryMapping几个段以外,Heap和Stack空间的总量有限,是此消彼长的。所以遇到这个错误,能够经过两个途径解决:1.经过 -Xss启动参数减小单个线程栈大小,这样便能开更多线程(固然不能过小,过小会出现StackOverflowError);2.经过-Xms -Xmx 两参数减小Heap大小,将内存让给Stack(前提是保证Heap空间够用)
状况六:java.lang.StackOverflowError
缘由:这也内存溢出错误的一种,即线程栈的溢出,要么是方法调用层次过多(好比存在无限递归调用),要么是线程栈过小
方案:优化程序设计,减小方法调用层次;调整-Xss参数增长线程栈大小