Vergleich von OutOfMemoryError und StackOverflowError — verstehen Sie die Unterschiede, Ursachen und Lösungen.
OutOfMemoryErrorDie JVM hat den verfügbaren Heap-Speicher erschöpft.
Die Anwendung allokiert mehr Objekte, als der Heap fassen kann. Dies kann durch Speicherlecks, das Laden großer Datensätze in den Speicher oder eine unzureichende Heap-Größe für die Arbeitslast verursacht werden.
Heap-Größe mit dem JVM-Flag -Xmx erhöhen. Die Anwendung mit Tools wie VisualVM auf Speicherlecks profilieren. Streaming oder Paginierung für große Datensätze verwenden. Ressourcen korrekt schließen, um Garbage Collection zu ermöglichen.
StackOverflowErrorDer Call-Stack hat seine maximale Größe überschritten, meist durch tiefe oder unendliche Rekursion.
Eine Methode ruft sich selbst rekursiv ohne korrekten Basisfall auf, oder gegenseitige Rekursion zwischen Methoden erzeugt eine Endlosschleife. Jeder Methodenaufruf verbraucht Stack-Speicher, bis das Limit erreicht ist.
Den Basisfall in rekursiven Methoden hinzufügen oder korrigieren. Rekursion in Iteration umwandeln. Die Stack-Größe mit dem JVM-Flag -Xss erhöhen. Auf versehentliche unendliche Rekursion in Konstruktoren oder toString-Methoden prüfen.