¿Puedes intentar/atrapar una excepción de desbordamiento de pila en java? Parece lanzarse de cualquier manera. Cuando mis procedimientos se desborden, me gustaría "penalizar" ese valor.try/catch on stack overflows in java?
Respuesta
parece funcionar:
public class Test {
public static void main(String[] argv){
try{
main(null);
}
catch(StackOverflowError e){
System.err.println("ouch!");
}
}
}
que estaba tratando con una excepción genérica. ¡Gracias! – stereos
Estoy de acuerdo en que averiguar qué está causando la excepción y prevenirla sería mejor. – Thilo
@stereos No estabas tratando de atrapar 'Exception' ¿eras? 'Error' extiende' Throwable' directamente, no a través de 'Exception'. –
Si usted está recibiendo un desbordamiento de pila, es probable que esté intentando recursividad infinita o está abusando gravemente invocaciones de funciones. Tal vez considere la posibilidad de que algunos de sus procedimientos sean iterativos en lugar de recursivos o verifique que tenga un caso base correcto en su procedimiento recursivo. Capturar una excepción de desbordamiento de pila es una mala idea; está tratando los síntomas sin abordar la causa subyacente.
En el caso del uso de recursión y desbordamiento de las opciones establecidas de la JVM, el SO es una respuesta negativa normal de un programa correcto. DEBEMOS atraparlo y reaccionar. Por ejemplo, en el caso de la secuencia diferida, establecida por una terminación recursiva (http://stackoverflow.com/a/33926444/715269), podríamos simplemente seguir pasos más pequeños. – Gangnus
La captura del error SO también es útil para la depuración cuando no se sabe cuál de los muchos métodos recursivos está causando el error SO :) –
Estoy de acuerdo con Michael - StackOverflowException es una señal de que algo salió muy mal. Tragarlo no es una buena idea. El mejor curso de acción es corregir la causa raíz de este error.
¿Dónde el interlocutor dice que quiere tragar? Por el contrario, se niega a "penalizar el valor" – Gangnus
Según tengo entendido, el OP desea capturar StackOverflowException para ofrecer alguna lógica personalizada (penalizar) al procesar la excepción. Y, volvemos al punto uno que es "Uno no debe atrapar errores". –
Y nuevamente estoy repitiendo: en el caso del uso de recursividad, SO tiene un significado completamente diferente: has saltado demasiado profundo, repítelo dividiéndolo en pasos más superficiales. – Gangnus
tienes que coger un error, no la excepción
Las características funcionales de Java 8 hace esta pregunta incomparablemente más importante. Mientras comenzamos a utilizar la recursión masivamente, debemos contar con StackOverflowException.
Los tipos Java 8 lambdas no tienen ninguno entre ellos que arroje StackOverflowException. Entonces, tenemos que crear tal. Es absolutamente necesario, sin eso no pasaremos ni siquiera el control IDE.
Por ejemplo, Integer -> Entero tipo de función podría parecer como:
@FunctionalInterface
public interface SoFunction <U> {
public U apply(Integer index) throws StackOverflowException;
}
Después de que podemos escribir una función que acepte lambdas tirar StackOverflowException.
public T get(int currentIndex) throws StackOverflowException{
Y sólo ahora podemos crear una lambda recursiva:
fiboSequence.setSequenceFunction(
(i) ->
fiboSequence.get(i-2).add(fiboSequence.get(i-1))
);
Después de que podemos llamar la cadena recursiva fiboSequence.get(i)
y obtener un resultado o una StackOverflowException si toda la cadena era incomputable.
En el caso del uso de recursividad, SO tiene un significado completamente diferente: ha saltado demasiado profundo, repítalo dividiéndolo en pasos más superficiales.
Aquí está mi solución,
prevenciónpublic class TryExample {
public static void main(String[] args){
try {
int no=10/0;
} catch (Exception e) {
System.err.println("Arithmetic Exception occurs!");
}
}
}
¿Su solución para algo que se ha respondido hace varios años de forma adecuada? ¿Te das cuenta de que atrapar 'Excepción' es lo que OP ya probó y obviamente no funcionó? – Tom
- 1. Diferencias entre la compilación Just in Time y On Stack Replacement
- 2. tryCatch y ggplot
- 3. ¿Cómo puedo imitar Stack Overflows SSO? ¿Particularmente donde se federa con serverfault.com?
- 4. Uso de tryCatch y fuente
- 5. Stack Stack
- 6. LINQ to SQL Conversion Overflows
- 7. fade in div on page load
- 8. Textarea en 100% Width Overflows Parent Container
- 9. pros y contras de TryCatch versus TryParse
- 10. Programming in Java bytecode
- 11. Assert keyword in java
- 12. In-memory Java DB
- 13. String datatype in java
- 14. Twisted in Java
- 15. Tokenising binary data in java
- 16. Lazy Load images on Listview in android (Beginner Level)?
- 17. url.Action open link in new window on ASP.NET MVC Página
- 18. ruby on rails logic for a partial in a layout
- 19. ¿Cómo puedo usar && in si en Ruby on Rails?
- 20. cargar un archivo de datos en R utilizando TryCatch
- 21. ¿Cuál es la diferencia entre Call Stack y Stack Trace?
- 22. C++ Stack Tracing problema
- 23. C++ stack y scope
- 24. JVM - Heap and Stack
- 25. Cómo inspeccionar Call Stack
- 26. ¿std :: stack expone iteradores?
- 27. Imprimir PHP Call Stack
- 28. Open Source SOA Stack
- 29. ¿Qué significa stack rank?
- 30. Thread-safe C++ stack
es mejor que la captura .... –
captura es útil para la depuración :) Ah – JonnyBoy