如何耗尽堆

时间:2012-03-06 18:16:00

标签: java

在Java中导致堆溢出的简单方法是什么?我需要测试一些外部代码在内存消失时如何响应。

4 个答案:

答案 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 LeakOutOfMemoryError将被抛出。

此外,如果你想要一个StackOverflow,你可以使用无限递归方法:

public void Foo(){Foo();}

StackOverflowError将被抛出。