![]() |
![]() |
|
![]() |
![]() |
|
Programmierung Rat & Tat für Programmierer |
![]() |
|
Themen-Optionen | Ansicht |
![]() |
#1 |
Veteran
![]() Registriert seit: 21.07.2001
Alter: 45
Beiträge: 404
|
![]() gibts ja leider nicht ...
ich hab ein einem programm das problem, dass ich bei der zerstörung eines objektes die datenbankverbindung lösen muss: public void finalize() { this.disconnect(); //DEBUG System.out.println("Die Verbindung wurde getrennt"); //DEBUG } aber leider tut das der gc nicht so wirklich - wie kann man den aufruf anderst machen (ich möchte aus designgründen die funktion nicht explizit selber aufrufen müssen, da das connect auch im konstruktor steht und implizit aufgerufen wird ...) |
![]() |
![]() |
![]() |
#2 |
Hero
![]() |
![]() Ich hab berufsbedingt mit einem Riesen-Java-Brocken (bis zu >10000 Objekte) zu tun und meiner erfahrung nach wird der GC nur dann aufgerufen wenn dem System der Speicher ausgeht, darum habe ich einen Thread implemtiert der den GC zyklisch aufruft (alle paar sekunden) und siehe da, die finalize-methode wurde aufgerufen...
mfG Clystron
____________________________________
God, Root, what is difference? |
![]() |
![]() |
![]() |
#3 |
Veteran
![]() Registriert seit: 21.07.2001
Alter: 45
Beiträge: 404
|
![]() also mit
System.gc(); selber starten? dabei stelt sich für mich nur wieder das problem, wann ich das machen soll. die dbverbindung wird nämlich erst am ende des programmes entfernt - wenn ich im exit-button ein System.gc() mache hab ich das objekt noch nicht zerstört und somit der gc umsonst aufgerufen - erst nach dem exit werden die ganzen objekte zerstört und damit sollte auch die db-verbindung gecancelt werden. eigentlich sollte ja die meldung, die ich im beispiel angebe, auf die konsole geschrieben werden, wenn ich das programm verlasse - tut es aber nicht. darum bin ich mir nicht sicher, ob es die db-verbindung entfernt ... |
![]() |
![]() |
![]() |
#4 |
Hero
![]() |
![]() Tja, wie gesagt ich hab nen eigenen Thread der mir den GC aufruft...
Frage: ist das ne 1.3 Applikation? Wenn ja könntest du vielleicht den shutdown-hook verwenden, damit kannst du dich in den Shutdown-Ablauf der VM hängen, bringt natürlich nur dann was wenn das Ganze erst bei Programmende passieren soll... mfG Clystron
____________________________________
God, Root, what is difference? |
![]() |
![]() |
![]() |
#5 |
Veteran
![]() Registriert seit: 21.07.2001
Alter: 45
Beiträge: 404
|
![]() shotdown hook? - klingt gut, denn das problem tritt nur beim beenden des programmes auf
was ist das genau? |
![]() |
![]() |
![]() |
#6 |
Hero
![]() |
![]() Du baust dir eine Klasse die das Runnable-Interface implementiert, in die RUN-Methode schreibst du deine Aufräumarbeiten rein.
Dann erzeugst du dir ein Objekt von der Klasse und einen Thread der dieses Objekt als Runnable-Target hat, den Thread aber nicht starten. Diesen Thread kannst du dann mit Runtime.getRuntime().addShutdownHook(<threadrefere nz>) als shutdown-hook registrieren und er wird gestartet wenn die VM beendet wird (auch bei kill von aussen) mfg Clystron
____________________________________
God, Root, what is difference? |
![]() |
![]() |
![]() |
#7 |
Veteran
![]() Registriert seit: 21.07.2001
Alter: 45
Beiträge: 404
|
![]() ok werd ich mal versuchen - habs noch nicht so mit den threads, aber ein bisschen lesen, und das ganze wird schon funktionieren ...
|
![]() |
![]() |
![]() |
#8 |
Hero
![]() |
![]() Threads zu verwenden ist recht einfach, knifflig wirds manchmal mit dem Aufräumen seit es die stop-methode nicht mehr gibt...
mfG Clystron
____________________________________
God, Root, what is difference? |
![]() |
![]() |
![]() |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
|
|