一.java堆溢出
在创建对象数量达到堆的最大容量限制后会抛出内存溢出异常
处理思路:
(1)与机器物理内存对比看是否可以调大虚拟机的堆参数(-Xms与-Xmx)
(2)代码上检查是否存在某些对象生命周期过长,持有状态时间过长的情况
二.虚拟机栈和本地方法栈溢出
无论栈太大还是虚拟机栈容量太小,当内存无法进行分配时,虚拟机抛出都是StackOverflowError异常
处理思路:
建立过多线程导致的内存溢出,在不能减少线程数或者不更换64位虚拟机的情况下,只能通过减少最大堆和减少栈容量来获取更多的线程
三.方法区和运行时常量池溢出
运行时产生大量的类去填满方法区直到溢出
处理思路: 手动设置MaxPermSize
四.本地内存溢出
处理思路:
可通过–XX:MaxDirectMemorySize指定。默认与Java堆得最大值一样。