2012-03-06 52 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。