Habt ihr wer schon mal erfolgreich die finalize-Methode verwendet?
Versuche es gerade (mit Visual Cafe und der darin inkludierten VM), und irgendwie ruft er mir beim vernichten des Objekts die Methode nicht auf. Mein Beispiel schaut so aus:
class TestClass
{
protected void finalize()
{
System.out.println( "FINALIZE" );
}
}
public class RunDemo
{
public static void main( String[] asArgs )
{
TestClass x = new TestClass();
x = null;
}
{
Wenn ich einen Befehl danach einbaue und nen Breakpoint draufsetze sammelt er das Objekt ein… nur wenn ich das nicht mache und das Programm sofort terminiert macht ers nicht mehr
Wenn ich einen Befehl danach einbaue und nen Breakpoint
draufsetze sammelt er das Objekt ein… nur wenn ich das nicht
mache und das Programm sofort terminiert macht ers nicht mehr
Unheimlich praktisch.
Aber bei Visual Cafe hilft das auch nicht, er tuts partout nicht.
Hab grad nochmal ein kleines Beispiel geschrieben, geht mit Sun JDK 1.3 Compiler/VM auch nicht:
public class Test
{
protected void finalize()
{
System.out.println( "FINALIZE" );
}
public static void main( String[] asArgs )
{
Test x = new Test();
x = null;
System.out.println( "FERTIG" );
}
}
Also bei mir gehts eben, wenn das Programm nicht sofort terminiert, ich glaub dann wird da nix mehr eingesammelt, dann schmeisst er eben alles weg beim Programmende…
Bau mal irgendwas ein, dass das Programm ne Weile läuft und im Zweifelsfall ruf auch ab und zu mal System.gc() auf.
PS: Ohne 20 Sekunden Pause gehts auch mit System.gc() nicht,
braucht beides. :o)
Hehe das war bei mir auch so… obwohl es bei mir kein System.gc() brauchte, der Garbage Collector hats bei mir auch so sofort eingesackt, als das Programm mal ne halbe Sekunde stand…
naja die Wege des Garbage Collectors sind unergründlich, ich verlasse mich drauf dass ers irgendwann mal einsammelt und das wars… wofür kann man so eine finalize() Methode überhaupt gebrauchen?
wofür kann man so eine finalize() Methode überhaupt
gebrauchen?
In meinem Fall speichere ich Persistenz-Informationen über laufende Workflows in einer Datenbank. Aus verschiedenen Gründen wäre es einfacher nach dem Beendigen des Workflows über eben finalize in der Datenbank aufzuräumen, weil ich in diesem konkreten Fall niemand hatte der darauf wartet, dass sich der Workflow beendet und dann das Aufräumen auslösen kann.