StackOverflowError in Java — How to Fix (2026) | Tutorials Logic
What is This Error?
The StackOverflowError is thrown when the JVM's call stack runs out of space. This typically happens due to infinite recursion — a method that calls itself without a proper base case, causing the stack to grow until it overflows.
Error Message:
Exception in thread "main" java.lang.StackOverflowErrorat com.example.Main.factorial(Main.java:5)
Common Causes
Quick Fix (TL;DR)
// ❌ Problem — no base case
int factorial(int n) {
return n * factorial(n - 1); // Infinite recursion!
}
// ✅ Solution — add base case
int factorial(int n) {
if (n <= 1) return 1; // Base case stops recursion
return n * factorial(n - 1);
}
// ✅ Better — use iteration for large n
long factorialIterative(int n) {
long result = 1;
for (int i = 2; i <= n; i++) result *= i;
return result;
}
Common Scenarios & Solutions
Scenario 1: Missing Base Case
int sum(int n) {
return n + sum(n - 1); // ❌ No base case — infinite recursion!
}
int sum(int n) {
if (n <= 0) return 0; // ✅ Base case
return n + sum(n - 1);
}
Scenario 2: toString() Infinite Loop
class Node {
Node next;
@Override
public String toString() {
return "Node{next=" + next + "}"; // ❌ Calls next.toString() → infinite if circular!
}
}
class Node {
int value;
Node next;
@Override
public String toString() {
// ✅ Don't recurse into next — just show value
return "Node{value=" + value + ", hasNext=" + (next != null) + "}";
}
}
Scenario 3: Convert Recursion to Iteration
// Recursive Fibonacci (can overflow for large n)
int fibRecursive(int n) {
if (n <= 1) return n;
return fibRecursive(n - 1) + fibRecursive(n - 2);
}
// ✅ Iterative Fibonacci (no stack overflow)
long fibIterative(int n) {
if (n <= 1) return n;
long a = 0, b = 1;
for (int i = 2; i <= n; i++) {
long temp = a + b;
a = b;
b = temp;
}
return b;
}
// ✅ Or use explicit stack for tree traversal
void traverseIterative(TreeNode root) {
Deque stack = new ArrayDeque<>();
stack.push(root);
while (!stack.isEmpty()) {
TreeNode node = stack.pop();
System.out.println(node.value);
if (node.right != null) stack.push(node.right);
if (node.left != null) stack.push(node.left);
}
}
Best Practices to Avoid This Error
Related Errors
Key Takeaways
- StackOverflowError occurs when the call stack runs out of space due to infinite recursion
- Every recursive method must have a base case that stops the recursion
- Verify the base case is actually reachable with your input values
- For large inputs, prefer iterative solutions over recursive ones
- Use an explicit Stack/Deque to convert deep recursion to iteration
- Increase JVM stack size with -Xss flag if you need deeper recursion
Frequently Asked Questions
Level Up Your Core java Skills
Master Core java with these hand-picked resources
10,000+ learners
Free forever
Updated 2026
Related Java Topics