有人能告诉我 Java 中的 StackOverflowError 是什么吗?
堆栈溢出是指当放置在堆栈中的数据过多时,会超出该有限资源的容量。
以下是一个示例:
public class Overflow {
public static final void main(String[] args) {
main(args);
}
}
该函数没有终止条件地反复调用自身。因此,由于每次调用都必须在堆栈上推送返回地址,堆栈会填满,但由于该函数永远不会返回,因此返回地址从未弹出堆栈,它只是不断地调用自身。
public void foo(int i) {
return foo(i+1);
}
public void doSomething(int time)
{
System.out.println("do #" + (doSomething(time++)));
}
java -Xmx200m YOUR_PROGRAM_CLASS
这将降低您获得StackOverFlow异常的机会。
(http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/java.html#Xms)