OOM(内存溢出异常)实例演示

除了PC(程序计数器)Java虚拟机的其他几个运行时区域均可能出现 OOM异常。






package day0413;

import java.util.ArrayList;
import java.util.List;

/**
 * VM Args: -Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError
 * @author 多多
 *
 */
public class HeapOOM {
	static class OOMObject{
	}
	
	public static void main(String [] args) {
		List<OOMObject> list=new ArrayList<OOMObject>();
		while(true) {
			list.add(new OOMObject());
		}
	}

}








实验:


package day0413;
/**
 * VM Args: -Xss128k
 * @author 多多
 *
 */
public class JavaVMStackSOF {
	private int stackLength=1;
	public void stackLeak() {
		stackLength++;
		stackLeak();
	}
	public static void main(String [] args)  throws Throwable{
		JavaVMStackSOF oom=new JavaVMStackSOF();
		try {
			oom.stackLeak();
		}catch (Throwable e) {
			System.out.println("stack length:"+ oom.stackLength);
			throw e;
		}
	}
}








package day0413;
/**
 * VM Args: -Xss2M
 * @author 多多
 *
 */
public class JavaVMStackOOM {
	private void dontStop() {
		while(true) {
		}
	}
	
	public void stackLeakByThread() {
		while(true) {
			Thread thread=new Thread(new Runnable() {
				public void run() {
					dontStop();
				}
			});
			thread.start();
		}
	}
	
	public static void main(String [] args) throws Throwable{
		JavaVMStackOOM oom=new JavaVMStackOOM();
		oom.stackLeakByThread();
	}
}






package day0413;

import java.util.ArrayList;
import java.util.List;

/**
 * VM Args: -XX:PermSize-10M -XX:MaxPermSize-10M
 * @author 多多
 *
 */
public class RuntimeConstantPoolOOM {
	public static void main(String [] args) {
		List<String> list=new ArrayList <String>();
		int i=0;
		while(true) {
			list.add(String.valueOf(i++).intern());
		}
	}

}














猜你喜欢

转载自blog.csdn.net/duoduo18up/article/details/79944650