如何模拟OOM
先上代码:
import java.util.ArrayList;
import java.util.List;
public class MemoryOverflowTest {
public static void main(String[] args) {
List<int[]> list = new ArrayList<>();
try {
while (true) {
// 每次分配一个较大的数组
int[] array = new int[1000000];
list.add(array);
System.out.println("Allocated: " + (list.size() * 1000000) + " ints");
}
} catch (OutOfMemoryError e) {
System.err.println("OutOfMemoryError caught!");
e.printStackTrace();
}
}
}
保存的文件名需要和 class 一致,也就是文件名应该为: MemoryOverflowTest.java
接着使用 javac 编译成 class: javac MemoryOverflowTest.java
现在就可以运行了,但是为了防止本机出现问题,建议运行的时候加上 Xmx 和 Xms 限制内存使用:
java -server -Xmx64m -Xms64m MemoryOverflowTest
评论