public class TailRecursionTest2 {
public static void main(String[] args) {
TailRecursionTest2 t = new TailRecursionTest2();
t.a(0);
}
public void a(int j) {
System.out.println(j);
j++;
if (j == 10000)
return;
List list = new Array List<Integer>(100000);
}
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.ArrayList. <init> (Unknown Source)
at TailRecursionTest2.a (TailRecursionTest2.java: 17)
at TailRecursionTest2.a (TailRecursionTest2.java: 20)
at TailRecursionTest2.a (TailRecursionTest2.java: 20)
at TailRecursionTest2.a (TailRecursionTest2.java: 20)
at TailRecursionTest2.a (TailRecursionTest2.java: 20)
回答
這個問題,你可以猜測是你有一個記憶韭菜,因爲堆已滿。您可以通過增加Java堆空間來修復它,但問題可能與您的代碼有關,因爲這些代碼可能無法正確釋放變量,或者您的遞歸函數沒有「退出點」(檢查迭代條件)
不能看到你的代碼,我可以建議你最有可能遞歸太深。
檢查您的遞歸終止條件是否理智,以及您的開始條件是否理智。
基本上,你正在把這麼多東西推到堆上,JVM放棄並在巴厘島上繪製海鷗。
推測,但+1,因爲可能會爲其他提供指導。 –
如果應用程序本身需要比默認更大的堆棧,該怎麼辦? – Santosh
應用程序的名稱(TailRecursionTest)使我相信事實並非如此,並且OP是沒有設置任何終止條件的情況。 – mcfinnigan
始終使在您的程序中使用的arraylist和其他引用在finally塊中爲null。 節省了大量的頭痛:)
-Lav
-1顯式地將對象置零是被認爲是不好的做法。你很少有這樣的場合。 – helpermethod
- 1. Python re.match遞歸調用內存泄漏
- 2. 遞歸內存泄漏
- 3. php中的內存泄漏遞歸
- 4. PHP:內存泄漏遞歸函數
- 5. 遞歸指針和內存泄漏
- 6. 遞歸調用ajax導致內存泄漏?
- 7. Java內存泄漏
- 8. Java內存泄漏
- 9. Java性能調優,JNI內存泄漏
- 10. java socket對象內存泄漏
- 11. Java內存泄漏跡象
- 12. java內存泄漏修復
- 13. Java LibGDX內存泄漏
- 14. Java休眠內存泄漏
- 15. Java 3D內存泄漏
- 16. Java線程內存泄漏
- 17. Java內存泄漏與類
- 18. 編碼:Java內存泄漏
- 19. Java String.split內存泄漏?
- 20. Java System.GC()和內存泄漏
- 21. 調試內存泄漏nodejs
- 22. 調查內存泄漏
- 23. 調查Javascript內存泄漏
- 24. Python:內存泄漏調試
- 25. 調試內存泄漏
- 26. 調試NSJSONSerialization內存泄漏
- 27. 調試JVM內存泄漏
- 28. 調試目標c使用xCode泄漏的內存泄漏
- 29. 內存泄漏 - SQLCommand對象?
- 30. 對FreeType2 FT_Load_Char內存泄漏
壞的編輯,毫無疑問。你的問題將很快關閉。 –
請添加一些示例代碼,否則無法回答。 –
毫無疑問...... – chepseskaf