/* * vm Args: -Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError * */ import java.util.ArrayList; import java.util.List; public class HeapOOM { static class OOMobject{ public static void main(String[] args) { List<OOMobject> list = new ArrayList<OOMobject>(); while(true){ list.add(new OOMobject()); } } } } 运行结果: Exception in thread "main" java.lang.OutOfMemoryError: Java heap space at java.util.Arrays.copyOf(Unknown Source) at java.util.Arrays.copyOf(Unknown Source) at java.util.ArrayList.grow(Unknown Source) at java.util.ArrayList.ensureExplicitCapacity(Unknown Source) at java.util.ArrayList.ensureCapacityInternal(Unknown Source) at java.util.ArrayList.add(Unknown Source) at HeapOOM$OOMobject.main(HeapOOM.java:11)
/* * VM Args: -Xss128k */ public class JavaVMStackSOF { private int stackLength = 1; public void stackLeak(){ stackLength++; stackLeak(); } public static void main(String[] args) { JavaVMStackSOF oom = new JavaVMStackSOF(); try{ oom.stackLeak(); }catch(Throwable e){ System.out.println("stack length:" + oom.stackLength); throw e; } } } 运行结果: stack length:1000 Exception in thread "main" java.lang.StackOverflowError at JavaVMStackSOF.stackLeak(JavaVMStackSOF.java:9) at JavaVMStackSOF.stackLeak(JavaVMStackSOF.java:10) at JavaVMStackSOF.stackLeak(JavaVMStackSOF.java:10) at JavaVMStackSOF.stackLeak(JavaVMStackSOF.java:10) at JavaVMStackSOF.stackLeak(JavaVMStackSOF.java:10) at JavaVMStackSOF.stackLeak(JavaVMStackSOF.java:10)
/*VM Args:-XX:PermSize=10M -XX:MaxPermSize=10M */ import java.util.ArrayList; import java.util.List; public class RuntimeConstantPoolOOM { public static void main(String[] args) { //使用list保持着常量池引用,避免Full GC回收常量池行为 List<String> list = new ArrayList<String>(); //10MB的PermSize在integer范围内足够产生OOM了 int i = 0; while(true){ list.add(String.valueOf(i++).intern()); } } } 运行结果:
程序运行了20分钟,都没有结果
原文:https://www.cnblogs.com/zhoujunok/p/11652969.html