1.2 KiB
1.2 KiB
除程序计数器外,其他都会发生该异常
Java堆溢出
内存泄漏 通过工具产看泄露对象到GC Roots的引用链 内存溢出 Java heap space 内存中对象都是必须存活的
虚拟机栈和本地方法栈溢出
请求栈深度超过虚拟机所允许的最大深度 栈允许动态扩展,扩展容量无法申请到足够内存抛出StackOverflowError HotSpot栈容量无法动态扩展,线程申请栈空间失败是抛出OutOfMemoryError 大多数情况下正常方法调用栈深度1000~2000是没有问题,过多线程时内存溢出就需要减少最大堆和减少栈容量换取更多的线程
方法区和运行时常量池溢出
JDK6,运行时常量池溢出PermGen space,String::intern()方法会将首次遇到的字符串实例复制到永久代的字符串常量池储存 JDK7,字符串常量池已经移到堆中 JDK8,取消永久代,使用元空间 方法区溢出
本机直接内存溢出
Heap Dump文件中不会有明显的异常情况,如果内存溢出后产生的Dump文件很小,程序中直接或间接使用了DirectMemory(NIO)可考虑检查直接内存