一、堆溢出
java
package jdk; import java.util.ArrayList; import java.util.List; /** * * @author Yong Huang * VM args: -Xms20M -Xmx20M */ public class HeapOOM { public HeapOOM() { // TODO Auto-generated constructor stub } static class OOMObject { } public static void main(String[] args) { List<OOMObject> list = new ArrayList<OOMObject>(); while (true) { list.add(new OOMObject()); } } }
二、棧溢出ide
package jdk; /** * * @author Yong Huang * VM args: -Xss128K */ public class JavaVMStackSOF { private int stackLength = 1; public JavaVMStackSOF() { // TODO Auto-generated constructor stub } public void stackLeak() { stackLength++; stackLeak(); } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub JavaVMStackSOF oom = new JavaVMStackSOF(); try { oom.stackLeak(); } catch (Throwable e) { System.out.println("stack length:" + oom.stackLength); throw e; } } }
三、常量池溢出code
package jdk; import java.util.ArrayList; import java.util.List; /** * * @author Yong Huang * VM args: -XX:PermSize=10M -XX:MaxPermSize=10M */ public class RuntimeConstantPoolOOM { public RuntimeConstantPoolOOM() { // TODO Auto-generated constructor stub } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub List<String> list = new ArrayList<String>(); int i = 0; while (true) { list.add(String.valueOf(i++).intern()); } } }
四、方法區溢出
class
package jdk; import java.lang.reflect.Method; import net.sf.cglib.proxy.Enhancer; import net.sf.cglib.proxy.MethodInterceptor; import net.sf.cglib.proxy.MethodProxy; /** * * @author Yong Huang * VM args: -XX:PermSize=10M -XX:MaxPermSize=10M */ public class JavaMethodAreaOOM { public JavaMethodAreaOOM() { // TODO Auto-generated constructor stub } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub while (true) { Enhancer enhancer = new Enhancer(); enhancer.setSuperclass(OOMObject.class); enhancer.setUseCache(false); enhancer.setCallback(new MethodInterceptor() { @Override public Object intercept(Object arg0, Method arg1, Object[] arg2, MethodProxy arg3) throws Throwable { // TODO Auto-generated method stub return arg3.invokeSuper(arg0, arg2); } }); enhancer.create(); } } static class OOMObject { } }