Grabage Collector

Status
Nicht offen für weitere Antworten.

PollerJava

Top Contributor
Hallo,


Macht es Sinn, den GC z.B.: alle 5 Sekunden auszuführen,
Wie ich schon mal geschrieben habe, hole ich mir alle 5s Werte aus der DB und zeige diese mit jFreeChart an,
Nach 5-7 Stunden ist es aber zu Ende, da der Java Heap voll ist (wieso auch immer, keine Ahnung),

Jetzt kann ich den GC ja nur alle 5s aufrufen, da ich eben alle 5s in die Methode komme, wo die Daten aufgezeichnet werden.

Macht das Sinn oder kann ich das irgendwie anders machen??


lg


PS: Mir ist schon klar, dass ich den GC nur höflich bitten kann, Objekte ohne Referenz zu verwerfen,
 
S

SlaterB

Gast
ein normal programmieres Programm kommt nicht mal merklich ins Luftholen, selber wenn du ununterbrochen Daten aus der DB holst,
jede Statement-Ausführung bedeutet ja eine Java-Pause + DB-Arbeit,
Zeit genug für GC, selbst wenn du in einer Endlosschleife Statement an Statement setzt


schon gar nicht würde es nach 5 Stunden zu Problemen kommen, sondern wenn dann direkt nach 1 Sekunde,
selbst wenn du 5 Stunden den Speicher vollmüllst und dann dem GC nur 1 Sekunde lässt, würde das schon reichen,

GC ist kein Problem,
Daten die nicht gelöscht werden, weil sie noch irgendwo statisch referenziert oder in einem offenen Resultset hängen, sind das Problem!

denke nicht über GC nach, denke über dein Programm nach!


(mehr oder weniger natürlich nur Vermutung, kein Wissen)
 

PollerJava

Top Contributor
ich schließe alle ResultSet,
ich schließe alle Statements,

Diese beiden sind auch nicht statisch,
Ich habe keine Idee, was mir da den Speicher vollmacht??
 

byte

Top Contributor
Der GC springt automatisch an. Der Heap wird nicht überlaufen, bevor der GC nicht mindestens versucht hat, ihn zu leeren. Da bringt also auch der manuelle Aufruf nichts, wie SlaterB schon sagte.
Das Problem werden wohl keine ResultSets oder Statements sein. Du zeigst die Daten doch auch bei Dir an. Also wirst Du die DB-Daten ja offenbar in Objekte stecken. Stell sicher, dass keine Referenzen mehr auf nicht mehr benötigte Objekte zeigen. Falls Du nichts findest, könntest Du auch versuchen, JFreeChart alle x Durchläufe neu zu initialisieren.
 

Rock Lobster

Bekanntes Mitglied
Ein häufiger Fehler ist, daß man innerhalb einer Schleife ständig neue Objekte instanziert. Schau mal, ob Du da irgendwo einen Fehler gemacht hast. Denk Dir Dein Modell nochmal genau aus, mach Dir vielleicht auch 'ne Skizze, und prüfe dann, ob wirklich nur so viele Objekte erstellt werden (egal welcher Art), wie nötig, oder ob Du womöglich irgendwo ein "Loch" hast, wo ständig neue und neue und neue erstellt werden.
 

byte

Top Contributor
Rock Lobster hat gesagt.:
Ein häufiger Fehler ist, daß man innerhalb einer Schleife ständig neue Objekte instanziert.

Das ist kein Problem, solange das Scope der Referenzen in der Schleife liegt.
 

Rock Lobster

Bekanntes Mitglied
Jepp, es muß nix heißen. Aber unter bestimmten Umständen kann es eben doch problematisch sein ;)
Hab hier in der Firma schon ein paar solche Dinge gesehen... das passiert einfach mal. Auf jeden Fall ist es kein Fehler, sich seine Schleifen einfach mal genau anzusehen ;)
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben