# Bei Abfrage schießt der Speicher in die Höhe



## bladepit (3. Nov 2011)

Hallo zusammen,

ich weiß nicht mehr weiter. Ich habe ein Program welches gut 4633458 Datensätze fetchen soll.

Ich habe eine Schleife die mir die Queries zusammenbaut und jede Query hat so ungefähr 14000 Datensätze. 

Wenn ich aber anfange die Daten in ein ResultSet zu machen:


```
ResultSet rs = session.connection().createStatement().executeQuery(query);
```

schießt mein Speicher hoch. Wenn ich mit allem durch bin (ohne Speichern der Daten sondern nur die eine Zeile da oben) hab ich 1,5 GB belegt.

Das kann doch nicht sein. Wo ist hier der Fehler?

Gruß

bladepit


----------



## Guybrush Threepwood (3. Nov 2011)

Was für eine Datenbank verwendest Du?


----------



## bladepit (3. Nov 2011)

Ah mist vergessen zu schreiben sorry.

Verwende die H2 Database


----------



## Guybrush Threepwood (3. Nov 2011)

Eingebettet oder als Server?


----------



## bladepit (3. Nov 2011)

Embedded


----------



## Guybrush Threepwood (4. Nov 2011)

Du hast eine ganze Menge Objekte in Deiner Abfrage, immerhin 4,6 Mio. Hast Du mal überschlagen, wie viel Speicher pro Objekt benötigt wird? Vielleicht erklärt das ja bereits einen Großteil des benötigten Speichers. Brauchst Du wirklich alle diese Daten alle gleichzeitig? Der Vorteil von Datenbanken ist immerhin, dass man immer nur die Daten holt, die man konkret braucht.
Ohne Dein Programm zu kennen ist es schwer zu sagen, woran es liegt. Ein Vorschlag: Wenn es sich machen lässt, dann hole in der Verarbeitung immer nur die Daten, die Du als nächstes benötigst. Ich glaube, das Problem liegt eher in der Architektur des Programms.


----------



## bladepit (4. Nov 2011)

Also ich habs rausgefunden.

Erstmal sehr hilfreich bei sowas: Memory Analyser für Eclipse oder halt als Standalone! Sehr empfehlenswert!

Es lag an der Session. Ich bekomme die auch nur übergeben und die wird nur einmal erstellt. Wenn der die Abfragen macht wird das Session Objekt immer größer. Ein clear() auf der Session hat gerreicht. Speicher auf 400 MB gedrückt.

Aber trotzdem dank dir für deine Mühen!


----------

