JAVA各种OOM代码例子和解决方法

文章资讯 2020-07-19 14:25:54

JAVA各种OOM代码例子和解决方法

  我们把各种OOM的情况列出来,然后逐一进行代码编写复现和提供解决方法。  
1. 堆溢出-java.lang.OutOfMemoryError: Java heap space。  
2. 栈溢出-java.lang.OutOfMemorryError。  
3. 栈溢出-java.lang.StackOverFlowError。  
4. 元信息溢出-java.lang.OutOfMemoryError: Metaspace。  
5. 直接内存溢出-java.lang.OutOfMemoryError: Direct buffer memory。  
6. GC超限-java.lang.OutOfMemoryError: GC overhead limit exceeded。   
堆溢出异常,相信大家很常见。即堆内对象不能进行回收了,堆内存持续增大,这样达到了堆内存的最大值,数据满了,所以就出来了。我们直接放溢出的代码样例。我们需要设置好idea的VM Options: -Xmx100m,这样我们设置为最大堆内存,这样运行起来就很快就出来错误了。
直接内存溢出,我们除了使用堆内存外,我们还可能用直接内存,即堆外内存。NIO为了提高性能,避免在Java Heap和native Heap中切换,所以使用直接内存,默认情况下,直接内存的大小和对内存大小一致。堆外内存不受JVM的限制,但是受制于机器整体内存的大小限制。如下代码设置堆最大内存为128m,直接内存为100m,然后我们每次分配1M放到list里边。