Speicherfresser?

Status
Nicht offen für weitere Antworten.
M

Maik111111

Gast
Hallo ich habe ein kleines Programm geschrieben, welches Daten aus einer Datenbank ausließt, diese Daten im Hashtable zwischenspeichert um anschließend diese Informationen als String (im XML-Format) an die aufrufende Funktion übergibt damit diese eine XML-Datei auf Platte schreibt.

So weit so gut. Allerdings bekomme ich nach kurzer Zeit einen OutOfMemory Error. Daher habe ich mir mal den JProfiler runtergeladen. Nur komme ich damit nicht so ganz klar.

Im Memory View sehe ich folgendes:
Face.run 98,6%
-> Face.berechnen 98,5%
-> Con.run 98,5%
-> Con.calc 92,8%
-> java.SQL.statement.executeQuery 59,3% = 36.060 kB

Also die Klasse Face und Con sind meine. In der Funktion Con.calc wird ein SQL Statement aufgerufen welches 36 MB speicher zieht? Kann ich mir nicht so recht vorstellen. Alle Statement und ResulSets die ich öffne, schließe ich auch anschließend. Um es kurz zu machen mir fehlt nun ein Hinweis wo genau ich suchen muss? Oder wie gehe ich vor um den Fehler zu finden?
 

foobar

Top Contributor
Vielleicht liegt es am JDBC-Treiber, das ist mir nämlich mal passiert. Der Treiber hat den Speicher einfach nicht wieder frei gegeben. Bau dir mal ein paar Logausgaben in den Code, dann siehst du an welcher Stelle der OoM kommt.
 
R

Roar

Gast
versteh ich dich richtig, wenn du deine daten aus demresultset ziehst, und als *string* im xml format speicherst und den dann weiter benutzt?
mach das nicht. nimm die rohen daten und klopz die in irgnendeine datenstruktur. die datenstruktur übergibst du dann deiner methode, die die daten in xml umwandelt, auf die platte schreibt, und sofort wieder verwirft.
 
M

Maik111111

Gast
Danke wie würden diese Logusgaben denn aussehen? Habe gerade mit Java angefangen und bin noch nicht so fit.
 
M

Maik111111

Gast
Verstehst du vermutlich falsch Ich versuchs mal so

Face.berechne:
1) run Con.calc

Con.calc:
2) getFelder From SQL-Table and put in Hashtable
3) If all in Hash create XML File and return

Face.berechen
4) get Ergebnis (XML-String) form Con.calc and write to Disk
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Speicherfresser finden? Allgemeine Java-Themen 9

Ähnliche Java Themen

Neue Themen


Oben