![]() |
|
|
Themen-Optionen |
|
|
Nach oben #1 |
|
Benutzer
Registriert seit: 30.11.2004
Beiträge: 97
|
Ich habe gerade das Problem, dass ich massenhaft Daten aus einer DB in den Speicher schaufel ... und dann kommt irgenwann die Meldung:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space. Kann man diesen Error abfangen (wie z.B. eine Exception) und verarbeiten ?? Ich hab zwar einen try/catch-Block drum ... aber da gehts immer nur rein, wenn eine Exception kommt ... Michael |
|
|
|
|
|
Nach oben #2 |
|
Erfahrener Benutzer
Registriert seit: 29.05.2004
Beiträge: 228
|
Nicht die Frage, aber du weisst schon dass du mit -Xmx256m oder so den Heap-Limit der JVM raufstellen kannst?
MfG Peschmä
__________________
Amazon.de | The Java Trap | Freie Software | Freie Software vs. Open Source | GNU Classpath | GCJ | SableVM "We should forget about small efficiencies, say about 97% of the time: Premature optimization is the root of all evil." - Donald Knuth |
|
|
|
|
|
Nach oben #4 |
|
Chefkoch-Mod
Registriert seit: 30.05.2004
Beiträge: 433
|
Wieviel Daten ziehst Du denn aus der DB?
__________________
Denk mal darüber nach... Lars ACHTUNG: wenn ich von Klassen spreche, könnte ich auch deren Instanzen meinen. www.linuxforen.de +++ www.macuser.de +++ www.mrunix.de +++ www.lmprojects.de |
|
|
|
|
|
Nach oben #6 |
|
Benutzer
Registriert seit: 30.11.2004
Beiträge: 97
|
Die Menge der Daten ist schon korrekt ... es handelt sich da um eine Zahl zwischen 100.000 und 1.000.000 Objekte, die ich aus den Daten der DB erzeuge.
Das mache ich deshalb, weil ich hinterher sehr viele Berechnungen machen muss, die normaler Weise ständig auf die DB zugreifen. Dadurch das ich vorher das in den Speicher lade, was ich brauche, steigere ich die Performance um ein Zigfaches (Berechnung vorher: über 8 Stunden ... nachher: 3 Min.) Bis jetzt hatte ich immer Berechnungen durchzuführen, wo bis 200.00 Datensaetzen geladen wurden ... aber nun kommen neue Anforderungen ... ;o( Um nochmal zur Ursprungsfrage zurückzukehren ... kann man einen Error fangen, ohne das mir die VM alles automatisch abwürgt ? Ich bin auch für andere Anregungen offen ... vielleicht gibts ja noch weiter Speicherschrauben an denen ich drehen könnte ... ?!?!? |
|
|
|
|
|
Nach oben #7 | |
|
Erfahrener Benutzer
Registriert seit: 29.05.2004
Beiträge: 228
|
Um noch auf dein Ursprungsposting zurückzukommen:
Zitat:
Hab noch gerade was gefunden was dich eventuell interssieren könnte: http://www.javaworld.com/javaworld/j...avatip130.html MfG Peschmä
__________________
Amazon.de | The Java Trap | Freie Software | Freie Software vs. Open Source | GNU Classpath | GCJ | SableVM "We should forget about small efficiencies, say about 97% of the time: Premature optimization is the root of all evil." - Donald Knuth |
|
|
|
|
|
|
Nach oben #8 |
|
Neuer Benutzer
Registriert seit: 17.03.2005
Beiträge: 18
|
Hi,
je nachdem wie Dein Programm aussieht hilft es vielleicht die Stacksize für Threads hoch zu setzen (-Xss). Aber ehrlich gesagt würde ich erst einmal kontrollieren ob beim Import Deiner Daten alles richtig läuft, z.B. nichts mehrfach gespeichert wird, ... Vielleicht kannst Du Deine Daten auch anders organisieren oder komprimieren? Wie groß ist denn ein durchschnittlicher Datensatz? Sollten denn alle Daten rein rechnerisch in Deinen Hauptspeicher passen? Vielleicht kannst Du auch zwischendurch mal den GarbageCollector starten ?!? Vielleicht hältst Du noch Referenzen auf Datenstrukturen von denen Du eigentlich dachtest das sie wieder freigegeben worden sind? Viel Spaß Stephan |
|
|
|
|
|
Nach oben #9 |
|
Benutzer
Registriert seit: 30.11.2004
Beiträge: 97
|
@peschmae:
Leider ist das nicht so einfach ... wenn eine Anweisung eine Exception wirft, kann ich diese mit einem try-catch-Block fangen. Wenn ein Error (nicht zu verwechseln mit einer Exception) auftritt, wird die ganze Applikation beendet. Meine Frage war, ob man Errors wie eine Exceptions behandeln kann. Danke für den Link ... werd ich bei Gelegenheit mal ausprobieren! @dyrathror: Mehrfach wird nix gespeichert, alte nicht mehr verwendete Referenzen gibt es (leider) nicht ( der Error kommt recht schnell nach dem Programmstart ... also quasi noch beim Reinladen der Daten ). Das mit dem Umorganisieren der Datenstruktur ist mir auch schon in den Sinn gekommen ... aber das heisst VIEL Arbeit .... ;( Einen kleinen Ausweg gibts mittlerweile schon ... auf unserem Server, auf dem die Applikation später laufen soll, wurde auf 4GB RAM aufgestockt (aber nicht nur wegen meinem Problem ... Aber die Frage, ob man einen ERROR abfangen und bearbeiten kann steht aber immer noch ... schliesslich gibt es ja auch noch andere ERRORS (also welche die nix mit dem Speicher zu tun habe) ... und die würde ich auch gerne fangen ... und wenn nur dazu dient, im Programm aufzuräumen (DB-Verbindung ordnungsgemäß beenden, Dateien schließen, ...), dem User eine aussagekräftige Fehlermeldung geben, den Fehler im Log-File "sichern" und dann das Programm zu beenden . Michael |
|
|
|
|
|
Nach oben #10 | |
|
Erfahrener Benutzer
Registriert seit: 29.05.2004
Beiträge: 228
|
Zitat:
Ich wüsste nicht dass man da was machen kann. Sorry, keine hilfe MfG Peschmä
__________________
Amazon.de | The Java Trap | Freie Software | Freie Software vs. Open Source | GNU Classpath | GCJ | SableVM "We should forget about small efficiencies, say about 97% of the time: Premature optimization is the root of all evil." - Donald Knuth |
|
|
|
|
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | |
|
|