Porovnání OutOfMemoryError a StackOverflowError vedle sebe — pochopte rozdíly, příčiny a opravy.
OutOfMemoryErrorJVM vyčerpal dostupnou paměť haldy.
Aplikace alokuje více objektů, než může halda pojmout. Může to být způsobeno únikem paměti, načítáním velkých datových sad do paměti nebo nedostatečnou velikostí haldy pro danou zátěž.
Zvyšte velikost haldy pomocí JVM příznaku `-Xmx`. Profilujte aplikaci na úniky paměti nástroji jako VisualVM. Pro velké datové sady používejte streaming nebo stránkování. Správně uzavírejte zdroje, aby mohl fungovat garbage collector.
StackOverflowErrorZásobník volání překročil svou maximální velikost, obvykle kvůli hluboké nebo nekonečné rekurzi.
Metoda volá sebe sama rekurzivně bez správné základní podmínky, nebo vzájemná rekurze mezi metodami vytváří nekonečnou smyčku. Každé volání metody spotřebovává prostor na zásobníku, dokud není dosaženo limitu.
Přidejte nebo opravte základní podmínku v rekurzivních metodách. Převeďte rekurzi na iteraci. Zvyšte velikost zásobníku pomocí JVM příznaku `-Xss`. Zkontrolujte, zda v konstruktorech nebo metodách `toString` nedochází k neúmyslné nekonečné rekurzi.