WCM - Das österreichische Computer Magazin Forenübersicht
 

Zurück   WCM Forum > Rat & Tat > Programmierung

Programmierung Rat & Tat für Programmierer

Microsoft KARRIERECAMPUS

Antwort
 
Themen-Optionen Ansicht
Alt 06.06.2002, 15:43   #1
it00x30
Veteran
 
Registriert seit: 21.07.2001
Alter: 45
Beiträge: 404


Standard destructor in java

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 ...)
it00x30 ist offline   Mit Zitat antworten
Alt 06.06.2002, 17:07   #2
Clystron
Hero
 
Registriert seit: 07.02.2001
Alter: 46
Beiträge: 805


Clystron eine Nachricht über ICQ schicken
Standard

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?
Clystron ist offline   Mit Zitat antworten
Alt 06.06.2002, 18:36   #3
it00x30
Veteran
 
Registriert seit: 21.07.2001
Alter: 45
Beiträge: 404


Standard

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 ...
it00x30 ist offline   Mit Zitat antworten
Alt 07.06.2002, 07:57   #4
Clystron
Hero
 
Registriert seit: 07.02.2001
Alter: 46
Beiträge: 805


Clystron eine Nachricht über ICQ schicken
Standard

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?
Clystron ist offline   Mit Zitat antworten
Alt 07.06.2002, 11:11   #5
it00x30
Veteran
 
Registriert seit: 21.07.2001
Alter: 45
Beiträge: 404


Standard

shotdown hook? - klingt gut, denn das problem tritt nur beim beenden des programmes auf

was ist das genau?
it00x30 ist offline   Mit Zitat antworten
Alt 07.06.2002, 11:15   #6
Clystron
Hero
 
Registriert seit: 07.02.2001
Alter: 46
Beiträge: 805


Clystron eine Nachricht über ICQ schicken
Standard

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?
Clystron ist offline   Mit Zitat antworten
Alt 07.06.2002, 14:00   #7
it00x30
Veteran
 
Registriert seit: 21.07.2001
Alter: 45
Beiträge: 404


Standard

ok werd ich mal versuchen - habs noch nicht so mit den threads, aber ein bisschen lesen, und das ganze wird schon funktionieren ...
it00x30 ist offline   Mit Zitat antworten
Alt 07.06.2002, 14:03   #8
Clystron
Hero
 
Registriert seit: 07.02.2001
Alter: 46
Beiträge: 805


Clystron eine Nachricht über ICQ schicken
Standard

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?
Clystron ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 03:03 Uhr.


Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Forum SEO by Zoints
© 2009 FSL Verlag