java内存溢出异常分析以及处理思路

一.java堆溢出

在创建对象数量达到堆的最大容量限制后会抛出内存溢出异常

处理思路:

(1)与机器物理内存对比看是否可以调大虚拟机的堆参数(-Xms与-Xmx)

(2)代码上检查是否存在某些对象生命周期过长,持有状态时间过长的情况

二.虚拟机栈和本地方法栈溢出

无论栈太大还是虚拟机栈容量太小,当内存无法进行分配时,虚拟机抛出都是StackOverflowError异常

处理思路:

建立过多线程导致的内存溢出,在不能减少线程数或者不更换64位虚拟机的情况下,只能通过减少最大堆和减少栈容量来获取更多的线程

三.方法区和运行时常量池溢出

运行时产生大量的类去填满方法区直到溢出

处理思路:                                                                                                                                                                                                                                                                                                         手动设置MaxPermSize

四.本地内存溢出

处理思路:

可通过–XX:MaxDirectMemorySize指定。默认与Java堆得最大值一样。

你可能感兴趣的:(java内存溢出异常分析以及处理思路)