我先演示一下jvm内存溢出错误。
package com.sk.jvm;
import java.util.ArrayList;
import java.util.List;
public class Test003 {
/**
* 运行这段代码必须堆内存10m以上
* 因为for循环循环了10次,每次生成了1m堆内存大小
*
* @param args
*/
public static void main(String[] args) {
System.out.println("堆的最大内存"+Runtime.getRuntime().maxMemory()/1024.0/1024+"m");
System.out.println("堆的可用内存"+Runtime.getRuntime().freeMemory()/1024.0/1024+"m");
System.out.println("堆的已经使用内存"+Runtime.getRuntime().totalMemory()/1024.0/1024+"m");
// -Xms1m -Xmx10m -XX:+PrintGCDetails -XX:+HeapDumpOnOutOfMemoryError
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);
}
}
}
运行这段代码必须堆内存10m以上,new 出来的对象存储在堆里面,因为for循环循环了10次,一共new了list10次,每次生成了1m堆内存大小
我然后通过 -Xms1m -Xmx10m设置jvm的初始内存和最大内存(如果不设置的话会有默认的,这里的话默认的内存肯定是可以运行的,所以我把jvm内存设置