在Java中导致堆溢出的简单方法是什么?我需要测试一些外部代码在内存消失时如何响应。
答案 0 :(得分:2)
比向数组列表中添加元素更简单imho就是删除中间人:
public static void main(String[] args) {
int[] a = new int[Integer.MAX_VALUE];
}
理论上不能保证会导致OoME,但由于arraylist本身在内部使用数组,因此同样的限制同样适用于其他解决方案。
答案 1 :(得分:2)
如果你想要的只是一个OutOfMemoryError
throw new OutOfMemoryError();
注意:如果您的堆空闲少于8 GB,int[] a = new int[Integer.MAX_VALUE];
将只会抛出OOME。
答案 2 :(得分:1)
ArrayList<String> heapme = new ArrayList<String>();
while ( true ) {
heapme.add( "I WANT TO HEAP MY VIRTUAL MACHINE TO DEATH PLZ!!! K THNX BIE!!!!" );
}
答案 3 :(得分:0)
创建ArrayList
,并向其添加对象:
private static final List<String> list = new ArrayList<String>();
// ...
while(true) list.add("Hello World");
和BTW,它被称为Memory Leak
。 OutOfMemoryError
将被抛出。
此外,如果你想要一个StackOverflow,你可以使用无限递归方法:
public void Foo(){Foo();}
StackOverflowError
将被抛出。