堆栈溢出
java.lang.stackOverFlowError,当前主线程方法的无条件递归调用,方法无法调出来,导致堆栈溢出错误;
内存溢出
- java.lang.outOfMemoryError: java heap space
java堆空间溢出,创建对象的内存大于堆内存,导致堆内存溢出;
- java.lang.outOfMemoryError:GC overhead limit exceeded
GC回收时间过长报错,具体原因为,超过98%的时间来进行垃圾回收,并且回收了不到2%堆内存;CPU使用率过高,而垃圾回收却没有任何效果;
- java.lang.outOfMemoryError:Direct buffer memory
-XX:MaxDirectMemorySize=5m,可设置直接内存大小
写NIO的程序的时候经常使用byteBuffer来读取或者写入数据,这是一种基于channel(通道)与缓冲区 (buffer)的I/O方式;
byteBuffer.allocteDirect(capability),直接分配操作系统本地内存,不属于GC管辖范围,由于不需要内存拷贝因此速度相对较快;
对象不断分配本地内存,而堆内存很少使用,GC不会回收DirectByteBuffer对象,当本地内存无法再继续分配,就会报该错误;
- java.lang.outOfMemoryError:unble to create new native thread
高并发场景下,一个应用进程创建太多的线程,超出系统承载,降低线程数或扩大平台的最大线程默认限制;
- java.lang.outOfMemoryError:MetaSpace
java8中,metaSpace是方法区在hotspot的实现,元空间存储的类信息有:虚拟机加载的类对象信息;常量池,静态变量,及时编译后的代码;
不断创建静态类对象,超出元空间内存大小;