Archiv verlassen und diese Seite im Standarddesign anzeigen : Fehler wie finden und beheben?
mwanaheri
26-05-2006, 16:59
Ich habe hier bei einer Datenbankanwendung ein merkwürdiges Verhalten:
Sie läuft normalerweise problemlos. Nun muss ich jedoch einige Sachen an einer Kopie der Datenbank machen. Ändere ich die Datenbankverbindung auf die Kopie, so erhalte ich folgende Fehlermeldung:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
Mehr Informationen krieg ich nicht. Beim Durchlauf im Debugger zeigt sich, dass die Verbindung zur Datenbank korrekt aufgebaut wird. Später im Programmstart jedoch bricht das Programm mit o.g. Fehlermeldung ab. Zu dem Zeitpunkt ist es in den Systemklassen, so dass ich nicht recht weiß, wie ich herausfinden kann, wo der Fehler im Programm liegt.
Hat jemand eine Idee dazu?
Die Fehlermeldung scheint recht eindeutig: Zu wenig Speicherplatz vorhanden!
Beheben: Irgendwo kannst du bei Java glaub einstellen, wie viel Speicher ein Programm verwenden darf. Frag mich jetzt aber nicht wo...
Mfg Bischi
mwanaheri
26-05-2006, 17:15
Danke schon mal für die Antwort. Was ich nicht verstehe: Wenn die beiden Datenbanken identisch sind, wieso braucht er dann bei der einen erheblich mehr Speicher als bei der anderen?
Kann es sein, dass du beide gleichzeitig lädst und somit die vorherige noch im Speicher hast?
MfG Bischi
mwanaheri
26-05-2006, 17:28
Hm, die Anwendung hat nur eine Datenbankverbindung (wird durchgereicht), und die habe ich geändert. Es kann also eigentlich keine andere offen sein. Vorsichtshalber habe ich auch Eclipse beendet und gecheckt, dass keine Java-instanz offen ist. Bringt auch nix.
*kopfkratz*
Das Problem besteht auch dann, wenn sich die jvm 512 - 700 Mb schnappen darf. Das müsste für eine vielfache Programmausführung reichen.
I gehe das Ganze noch mal Klasse für Klasse durch, nach Aufrufhierarchie.
mwanaheri
26-05-2006, 21:11
Autsch! Fehler gefunden. Saublöder Fehler. Ich hatte beim Vorbefüllen einer Liste vergessen, ein Limit zu setzen. So wäre der Fehler auch auf der normalen Datenbank aufgetreten.
Zum Fehlereinkreisen habe ich von der Hauptklasse aus alle jeweils aufgerufenen Konstruktoren mit System.out.println() umgeben und bin dann jeweils in die Klassen abgestiegen (Reihenfolge nach Aufruf), innerhalb derer es geknallt hat. Ist nicht schön, funktioniert aber. Kennst du da ein effizienteres Verfahren, wenn man keine ordentliche Fehlermeldung kriegt?
Verwende log4j in deinem Projekt, dann kannst du die Meldungen auch im endgueltigen Programm lassen und setzt nur den Output-Level.
http://logging.apache.org/log4j/docs/http://logging.apache.org/log4j/docs/
mwanaheri
27-05-2006, 15:17
danke für den Tipp. Werde da mal stöbern gehen.
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.