栈溢出(StackOverflowError)
--- 递归引起 栈空间不足
--- 线程请求的栈深度大于虚拟机所允许的最大深度,将抛出StackOverflowError
堆溢出(OutOfMemoryError:Java heap space)
--- 死循环,或者内存不够,创建对象时如果没有可以分配的堆内存
--- 虚拟机在扩展栈深度时无法申请到足够的内存空间,将抛出OutOfMemberError
永久代溢出(OutOfMemoryError: PermGen space)
--- 常量池溢出
--- 方法区溢出
直接内存溢出
--- DirectMemory可以通过-XX:MaxDirectMemorySize指定,如果不指定,默认与Java堆的最大值(-Xmx指定)一样。
--- NIO会使用到直接内存
栈内存溢出:程序所要求的栈深度过大。
堆内存溢出: 分清内存泄露还是 内存容量不足。泄露则看对象如何被 GC Root 引用,不足则通过调大-Xms,-Xmx参数。
永久代溢出:Class对象未被释放,Class对象占用信息过多,有过多的Class对象。
直接内存溢出:系统哪些地方会使用直接内存。
参考:写代码实现堆溢出、栈溢出、永久代溢出、直接内存溢出