Java 产生内存溢出的几种情况
StackOverFlowError
解释:线程栈内存溢出, 原因:方法递归调用
OutOfMemoryError:Java heap memory
解释:堆内存溢出 原因:大量对象创建撑爆堆区
OutOfMemoryError:GC overhead limit exceeded
解释:频繁GC且GC无效果 原因:大量对象创建且无法回收,GC时间占用超过98%并且回收了不到2%的内存
OutOfMemoryError:Direct buffer memory
解释:直接内存溢出 原因:写NIO程序时经常会用到ByteBuffer来读写数据,可以使用ByteBuffer.allocate()方法或ByteBuffer.allocaleDirect()方法创建,前者在JVM堆内存中申请空间,后者在直接内存中申请空间可以避免在native堆和java堆中数据拷贝提升效率,但是因为使用的是直接内存不在GC管辖范围,如果直接内存不够分配程序就会崩溃
OutOfMemoryError:unable to create new native thread
解释:无法创建更多线程 原因:应用进程创建线程数超过系统承载极限。Linux系统默认允许单个进程创建不超过1024个线程
OutOfMemoryError:Metaspace
解释:方法区溢出 原因:大量类被加载
下一篇:
java基础学习二、环境变量配置