Welchen Schaden hat ein StackOverflowError?

8

Nur neugierig. In einer Antwort zum Abfangen von StackOverflowErrors schrieb jemand: "Sicherlich gibt es Situationen, in denen ein Stapelüberlauf eine Anwendung inkonsistent machen könnte wie eine Gedächtniserschöpfung ". Was ist das Besondere an StackOverflowErrors, dass sie den Anwendungsstatus mehr als beispielsweise eine NullPointerException im Falle eines Fehlers zu beschädigen drohen? Eine Sache, an die ich denken kann ist, dass ein StackOverflowError an Orten auftreten kann, wo normalerweise niemals eine Ausnahme (oder eine andere Throwable) geworfen wird (z.B. ein einfacher Getter), so dass das Programm wahrscheinlich nicht darauf vorbereitet ist. Gibt es teuflische Probleme?

    
Hans-Peter Störr 27.08.2013, 07:06
quelle

2 Antworten

10

Ein Stack-Überlauf-Fehler bedeutet überhaupt nicht, dass der Speicher erschöpft ist und nichts an sich inkonsistent macht.

Aber ein Stapelüberlauffehler ist normalerweise ein Fehler. Sie sollten den Fehler beheben, anstatt die Ausnahme abzufangen. Verwenden Sie das Ausnahmesystem nicht, um Fehler zu verstecken.

Selbst wenn Sie wissen, dass das Risiko eines zu tiefen Stapels besteht (Graph-Exploration zum Beispiel), gibt es bessere Möglichkeiten, dies zu kontrollieren, als den Stack explodieren zu lassen.

Von dem Javadoc der Fehler-Oberklasse :

  

Ein Fehler ist eine Unterklasse von Throwable, die auf schwerwiegende Probleme hinweist   dass eine vernünftige Anwendung nicht versuchen sollte, zu fangen. Die meisten solcher   Fehler sind abnormale Bedingungen. Der ThreadDeath-Fehler, obwohl a   "normale" Bedingung, ist auch eine Unterklasse von Fehler, weil die meisten   Anwendungen sollten nicht versuchen, es zu fangen.

    
Denys Séguret 27.08.2013 07:09
quelle
0

Ein Fehler ist ein ernstes Problem, das nicht aufgefangen werden sollte daher: fang auch nicht die Superklasse (Throwable) Wenn eine Methode einen Fehler auslöst, müssen Sie keine throws-Klausel deklarieren

Das Verhalten einer Anwendung ist nach einem Fehler oft nicht vorhersehbar - Fehler weisen auf einen abnormalen Zustand hin

Wenn also ein StackOverflowError geworfen wurde, hat die Anwendung das Maximum an Stack-Plätzen erreicht. Sie könnten Ihre Anwendung erneut überprüfen, um z. der Müllsammler früher.

    
JavaDM 27.08.2013 07:15
quelle

Tags und Links