开发者

What is StackOverflowError in Java ? When it occurs? [closed]

It's difficult to tell what is being asked here. This question is ambiguous, vague, incomplete, overly broad, or rhetorical and cannot be reasonably answered in its current form. For help clarifying this question so that it can be re开发者_开发技巧opened, visit the help center. Closed 12 years ago.

Can anybody tell me what is StackOverflowError in Java ?


A stack overflow occurs when too much data is put on the stack, which is a limited resource.

Here's an example:

public class Overflow {
    public static final void main(String[] args) {
        main(args);
    }
}

That function calls itself repeatedly with no termination condition. Consequently, the stack fills up because each call has to push a return address on the stack, but the return addresses are never popped off the stack because the function never returns, it just keeps calling itself.


There is no such thing as a StackOverFlowException in Java.

There is, however, a class named StackOverflowError and the documentation says:

Thrown when a stack overflow occurs because an application recurses too deeply.

If you don't know what the stack is, read this: Call stack


Each time you call a function, a small piece of a special memory region - the stack - is allocated to it and holds the local variables and the context of the function. If our function calls another function, the next piece is cut off the stack and so on. The stack shrinks when a function returns again. If the nesting level becomes too high, it can overflow.

This is a very general concept. On Java, a StackOverflowError is thrown when the stack size is exceeded. This is an error, not an exception, because you are urged to avoid this situation, not recover from it.

The typical example would be endless recursion:

public void foo(int i) {
  return foo(i+1);
}


Usually when recursive method is being called too many times. For example:

public void doSomething(int time)
{
  System.out.println("do #" + (doSomething(time++)));
}


The Java machine allocates your program a specific quantity of memory. The error is caused by your program using too much memory. The examples above are good, but if you are trying to create a very large array that can cause it to overflow as well. You can Allocate more memory(this example of 200MB) to your program by using command line arguments

java -Xmx200m YOUR_PROGRAM_CLASS

This will decrease the chance of you getting a StackOverFlowException.

This Explains the command line options

(http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/java.html#Xms)

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜