JVM常见错误 OutOfMemoryError和StackOverflowError

115 阅读1分钟

OutOfMemoryError

错误原因: java.lang.OutOfMemoryError: Java heap space 堆内存溢出
解决办法:调大堆内存大小

// -Xms1m -Xmx10m -XX:+PrintGCDetails
		List<Object> listObject = new ArrayList<>();
		for (int i = 0; i < 10; i++) {
			System.out.println("i:" + i);
			Byte[] bytes = new Byte[1 * 1024 * 1024];
			listObject.add(bytes);
		}
		System.out.println("添加成功...");

StackOverflowError

错误原因: java.lang.StackOverflowError表示为栈溢出,一般产生于递归调用。
解决办法:设置线程最大调用深度,默认是1m

//-Xss5m 设置最大调用深度
public class StackTest {
	private static int count;
	public static void count(){
		try {
			count++;
			count(); 
		} catch (Throwable e) {
			System.out.println("最大深度:"+count);
			e.printStackTrace();
		}
	}
	public static void main(String[] args) {
			 count();
	}
}