有人能告訴我什麼是Java中的StackOverflowError?什麼是Java中的StackOverflowError?什麼時候發生?
回答
當太多的數據被放置在stack,這是一種有限的資源時,會發生堆棧溢出。
下面是一個例子:
public class Overflow {
public static final void main(String[] args) {
main(args);
}
}
這個函數調用自身多次與沒有終止條件。因此,堆棧填滿是因爲每次調用都必須在堆棧上推送一個返回地址,但返回地址永遠不會從堆棧彈出,因爲該函數永遠不會返回,它只會不斷調用它自己。
通常當遞歸方法被調用的次數太多時。例如:
public void doSomething(int time)
{
System.out.println("do #" + (doSomething(time++)));
}
在Java中沒有像StackOverFlowException
這樣的東西。
有,然而,一個名爲StackOverflowError
和the documentation類說:
時發生堆棧溢出,因爲應用程序遞歸太深而引發。
如果你不知道堆棧是什麼,這樣說的:Call stack
每次調用一個函數,一小塊特殊的內存區域 - 棧 - 被分配給它,並持有局部變量和函數的上下文。如果我們的函數調用另一個函數,那麼下一個函數將被切斷,等等。當函數再次返回時,堆棧會縮小。如果嵌套級別太高,可能會溢出。
這是一個非常普遍的概念。在Java上,超過堆棧大小時會引發StackOverflowError
。這是一個錯誤,而不是例外,因爲你被要求避免這種情況,不能從中恢復。
典型的例子是無限遞歸:
public void foo(int i) {
return foo(i+1);
}
Java的機器分配程序的內存特定數量。錯誤是由程序使用太多內存引起的。上面的例子很好,但是如果你正在嘗試創建一個非常大的數組,並且可能導致它溢出。 您可以通過使用命令行參數
java -Xmx200m YOUR_PROGRAM_CLASS
這將減少你得到一個StackOverFlowException的機會分配更多的內存(200MB的這個例子中)到你的程序。
This Explains the command line options
(http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/java.html#Xms)
-1:即使存在大量堆內存,StackOverflowError也會發生 – 2010-06-17 19:08:50
但是錯誤的根本原因仍然相同,內存太多。您可以通過增加堆大小或更改程序來更有效地使用內存來解決此問題。 – Lee 2010-06-17 21:52:16
- 1. 什麼時候發生NullPointerException?
- 2. 什麼時候發生?
- 3. 什麼時候會發生?
- 4. 什麼時候發生SKErrorClientInvalid?
- 5. 什麼時候StackOverflowError被拋出?
- 6. 什麼是編組?什麼時候發生什麼事情「被編組?」?
- 7. StackOverflowError在Java中意味着什麼?它的修復是什麼?
- 8. PDO SQLite是什麼時候誕生的?
- 9. Clojure的生日是什麼時候?
- 10. 什麼時候TDE解密發生
- 11. 什麼時候發生Window.SourceInitialized事件
- 12. 什麼時候綁定實際發生
- 13. 什麼時候發生HTTPS握手?
- 14. RoR生成的文件 - 這是什麼時候發生的?
- 15. 什麼時候是K 1024,什麼時候是1000?
- 16. 什麼時候生成MSIL?
- 17. 什麼時候WindowStartupLocation生效
- 18. 這是爲什麼產生一個StackOverflowError
- 19. 什麼時候和爲什麼沒有實現(java.lang.reflect.InvocationTargetException)發生?
- 20. OutOfMemoryError,我不知道什麼時候或爲什麼發生
- 21. .Net觀察者模式更改。這是什麼時候發生的?爲什麼?
- 22. 什麼時候返回空集合,什麼時候不是?
- 23. 什麼時候注入構造函數,什麼時候是CDI
- 24. Android:爲什麼兩個onConfigurationChanged()事件在旋轉時發生,佈局的大小是什麼時候發生的?
- 25. jQuery動畫 - 什麼時候是異步的,什麼時候不是?
- 26. 什麼時候在Java中設置mutate?
- 27. 什麼時候在Java中使用「this」
- 28. 什麼時候在WebDriverEventListener中觸發onException?
- 29. 什麼時候/爲什麼相互左遞歸在Antlr中發生?
- 30. 這是什麼,爲什麼發生?
給我力量.... – 2010-06-17 11:12:59
是谷歌壞了? – 2010-06-17 11:13:19
這個問題讓我驚訝於代表114的代表。 – 2010-06-17 11:14:16