周末了,觉得我还有很多作业没有写,针对目前大家对OOM的类型不太熟悉,那么我们来总结一下各种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,这样我们设置为最大堆内存,这样运行起来就很快就出来错误了。
package oom; import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; /** * @author huangqingshi * @Date 2020-07-18 */ public class HeapOOM { static class OOMObject { } public static void main(String[] args) throws InterruptedException { List<OOMObject> list = new ArrayList<>(); while(true) { // TimeUnit.MILLISECONDS.sleep(1); list.add(new OOMObject()); } } }