Gibt es einen Destruktor für Java? Ich scheine keine Dokumentation dazu zu finden. Wenn nicht, wie kann ich den gleichen Effekt erzielen?
Um meine Frage zu präzisieren: Ich schreibe eine Anwendung, die mit Daten arbeitet, und die Spezifikation besagt, dass es eine "Reset"-Schaltfläche geben sollte, die die Anwendung in ihren ursprünglichen, gerade gestarteten Zustand zurückversetzt. Alle Daten müssen jedoch "live" sein, es sei denn, die Anwendung wird geschlossen oder die Reset-Taste wird gedrückt.
Da ich normalerweise ein C/C++-Programmierer bin, dachte ich, dies wäre trivial zu implementieren. (Ich habe mein Programm so strukturiert, dass alle Objekte, die zurückgesetzt werden können, zur selben Klasse gehören, so dass ich alle "lebenden" Objekte einfach zerstören kann, wenn eine Reset-Taste gedrückt wird.
Ich dachte, wenn alles, was ich tat, war nur die Daten zu dereferenzieren und warten auf den Garbage Collector, um sie zu sammeln, würde es nicht ein Speicherleck, wenn mein Benutzer wiederholt Daten eingegeben und drückte die Reset-Taste sein? Ich dachte auch, da Java als Sprache ziemlich ausgereift ist, sollte es eine Möglichkeit geben, dies zu verhindern oder dieses Problem elegant zu lösen.
10 Stimmen
Es gibt nur dann ein Speicherleck, wenn Sie Verweise auf Objekte halten, die Sie nicht benötigen, d.h. es gibt einen Fehler in Ihrem Programm. Die GC wird so ausgeführt, wie sie benötigt wird (manchmal auch früher)
22 Stimmen
Die virtuelle Maschine wird die GC nicht früh genug ausführen, wenn Sie Daten schnell über Objekte verarbeiten. Die Vorstellung, dass die GC immer mithalten oder die richtigen Entscheidungen treffen kann, ist ein Trugschluss.
2 Stimmen
@Kieveli Würde JVM nicht GC ausführen, bevor ein Fehler ausgegeben wird?
4 Stimmen
Ja, es wäre schön, wenn es einen Destruktor für Java gäbe, der es ein für alle Mal zerstört.
0 Stimmen
@WVrock - Interessante Frage. Die Antwort ist "nein" (zumindest für einige Arten der "schnellen Datenverarbeitung durch Objekte"), aber aus einem differenzierten Grund. Der eigentliche Fehler tritt auf, wenn man etwa 97 % der Zeit mit der Garbage Collection und nur 3 % mit der eigentlichen Programmlogik verbringt, weil die meisten Verweise immer noch Zeiger haben, die in sie hineinführen. Wenn die "schnelle Verarbeitung" eine kleine Anzahl von Zeigern verwendet, gibt es kein Problem.
0 Stimmen
Ja, es gibt eine. Es wird Oracle genannt.