A StackOverflowError
- ошибка времени выполнения в java.
Он вызывается, когда количество памяти стека вызовов распределено JVM.
Обычный случай, когда a StackOverflowError
выбрасывается, когда стек вызовов превышает из-за чрезмерной глубокой или бесконечной рекурсии.
Пример:
public class Factorial {
public static int factorial(int n){
if(n == 1){
return 1;
}
else{
return n * factorial(n-1);
}
}
public static void main(String[] args){
System.out.println("Main method started");
int result = Factorial.factorial(-1);
System.out.println("Factorial ==>"+result);
System.out.println("Main method ended");
}
}
Трассировка стека:
Main method started
Exception in thread "main" java.lang.StackOverflowError
at com.program.stackoverflow.Factorial.factorial(Factorial.java:9)
at com.program.stackoverflow.Factorial.factorial(Factorial.java:9)
at com.program.stackoverflow.Factorial.factorial(Factorial.java:9)
В приведенном выше случае можно избежать программных изменений. Но если логика программы правильная, и все же это происходит, тогда размер стека должен быть увеличен.
Вместо использования обычного представления создайте частичное представление. Затем их можно использовать сами по себе, что очень похоже на CancelLayout (), или вы можете включить их в представление, которое ссылается на главную страницу, и в этом случае это будет полный макет. Они также полезны, если вы хотите отправить обратно частичный фрагмент HTML в ответ на запрос AJAX.
Можно создать пользовательский ActionResult, который делает в значительной степени что-либо. ActionResult управляет тем, что передают обратно клиенту как ответ. Это было бы тривиально для создания класса, который расширяет ActionResult, который ничего не делает.