在JVM中,有以下内存区间:
堆、永久区、线程栈、直接内存
内存溢出(OOM)的原因及解决方法
堆溢出
原因:占用大量堆空间,直接溢出
解决方法:增大堆空间,及时释放内存
永久区溢出
原因:生成大量的堆
解决方法:增大Perm区(持久代)、运行Class回收
Java栈溢出
原因:操作系统没有提供足够的空间
解决方法:减少堆内存、减少线程栈大小
直接内存溢出
原因:ByteBuffer.allocateDirect()无法从操作系统获得足够的空间
解决方法:减少堆内存、有意触发GC
Tomcat OOM
Tomcat 在接收大量请求时发生OOM,获取堆Dump文件,进行分析。
使用MAT打开堆
分析目的:
找出OOM的原因
推测系统OOM时的状态
给出解决这个OOM的方法
补充:
MAT:基于Eclipse用于分析堆Dump文件的分析软件。