OutOfMemoryError

Nehmen wir an, beim Verarbeiten sehr großer Dateien (oder großer Datenmengen aus der Datenbank) erhalten Sie eine Fehlermeldung, die auf einen OutOfMemory-Fehler hinweist. Ziemlich am Anfang der Meldung steht dann folgendes.


java.lang.OutOfMemoryError: Java heap space


Das ist einer der gemeinsten Fehler, die auftreten können.

Passiert ist folgendes: Der Java-Prozess will ein Stück Speicher reservieren, doch das System gibt ihm keinen mehr, da er bereits alles an Speicher belegt hat, was ihm beim Start zugesichert wurde. Wahrscheinlich ist irgendein Profil schuld, das unnötig viel Speicher verbraucht.

Was diesen Fehler so unangenehm macht, ist zum einen, dass nicht unbedingt genau das Profil mit diesem Fehler abbricht, das den Speicher ausgereizt hat, sondern theoretisch jeder andere Teil des Java-Programms (Integration Server, Services, ...), der eben gerade noch ein paar Bytes haben möchte. Der Schuldige ist also nicht immer gleich ausgemacht.

Zum anderen sind dadurch die Folgen dieses Fehlers völlig undefiniert. Unter Umständen sind lebenswichtige Teile des Integration Servers betroffen. Möglicherweise zeigen sich die Auswirkungen erst lange nach dem Auftreten des OutOfMemoryErrors. Daher ist ein System, dem einmal der Speicher ausgegangen ist, so bald wie möglich neu zu starten (der Java-Prozess, nicht der ganze Rechner!).

Im Nachhinein lässt sich oft nur sehr schwierig feststellen, welcher Teil eines Profils den Speicher überlastet. Daher werden im Folgenden die typischen Ursachen aufgelistet und beschrieben, wie man den OutOfMemoryError schon von Anfang an vermeidet.