StackOverflowError in java

StackOverflowError in a runtime error in java. It is thrown when an application recurses too deeply. Whenever the method execution happens a call stack with limited amount of memory location is assigned. This amount of memory is allocated by JVM. Based upon the number of the method execution the size of the call stack grows and srinks.

In most of the cases StackOverFlowError is thrown when call stack exceeds because of excessive deep or infinite recursion. During which the need to store the local variable in the method exceeds the allocated stack size.

A StackOverflowError simply signals that there is no more memory available.

public class Main {
    int calculateFactorial(int number) {
        return number * calculateFactorial(number - 1);
    }
    public static void main(String[] args) {
        Main main = new Main();
        System.out.println(main.calculateFactorial(10));
    }
}

Output

Exception in thread "main" java.lang.StackOverflowError
	at Main.calculateFactorial(Main.java:3)
	at Main.calculateFactorial(Main.java:3)

How to deal with StackOverflowError

Analyse the code and exception stack trace. Then do the following based on your analysis

  • Remove recursion with no termination condition from application.
  • Remove cyclic dependency between classes.
  • Remove instance if exist like class instance within the same class as an instance variable of that specified class.
  • Increase stack size, if none of the conditions are there in the application.

Java interview questions on Exception Handling