2012-03-06 47 views
3

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

回答

2
不是添加元素添加到数组列表恕我直言简单

是刚刚绕过了中间商:

public static void main(String[] args) { 
    int[] a = new int[Integer.MAX_VALUE]; 
} 

那么理论上不能保证导致OOME但由于ArrayList的使用数组内部本身,同样的限制适用于其他的解决方案以及..

+0

太棒了。这工作得很好。谢谢。 – User1 2012-03-06 18:30:53

0

创建ArrayList和对象添加到它:

private static final List<String> list = new ArrayList<String>(); 

// ... 

while(true) list.add("Hello World"); 

和,顺便说一句,这就是所谓的一个Memory Leak。将会抛出OutOfMemoryError

而且,如果你想有一个StackOverflow上,你可以用一个无限递归方法做到这一点:

public void Foo(){Foo();} 

StackOverflowError将被抛出。

+2

只是增加一个数组的大小,直到它不适合内存不是一个内存“泄漏”......泄漏是你无法取消引用/释放某处的东西,所以它的内存不回收,最终导致你用尽内存。 – ColinD 2012-03-06 18:29:51

1
ArrayList<String> heapme = new ArrayList<String>(); 
while (true) { 
    heapme.add("I WANT TO HEAP MY VIRTUAL MACHINE TO DEATH PLZ!!! K THNX BIE!!!!"); 
} 
2

如果你想要的是一个OutOfMemoryError

throw new OutOfMemoryError(); 

备注:int[] a = new int[Integer.MAX_VALUE];只会在您拥有少于8 GB的堆空间时才会抛出OOME。