Ich habe viele der Rookie-Java-Fragen gelesen finalize()
und finde es verwirrend, dass niemand wirklich deutlich gemacht hat, dass finalize () ein unzuverlässiger Weg ist, um Ressourcen zu bereinigen. Ich habe jemanden kommentieren sehen, dass er es verwendet, um Verbindungen zu bereinigen, was wirklich beängstigend ist, da der einzige Weg, um einer Garantie, dass eine Verbindung geschlossen ist, so nahe zu kommen, darin besteht, try (catch) endgültig zu implementieren.
Ich war nicht in CS geschult, aber ich programmiere seit fast einem Jahrzehnt professionell in Java und habe noch nie jemanden gesehen, der finalize()
jemals in ein Produktionssystem implementiert wurde. Dies bedeutet immer noch nicht, dass es nicht seinen Nutzen hat oder dass die Leute, mit denen ich zusammengearbeitet habe, es richtig gemacht haben.
Meine Frage ist also, welche Anwendungsfälle gibt es für die Implementierung finalize()
, die nicht zuverlässiger über einen anderen Prozess oder eine andere Syntax innerhalb der Sprache behandelt werden können?
Bitte geben Sie bestimmte Szenarien oder Ihre Erfahrungen an. Das einfache Wiederholen eines Java-Lehrbuchs oder die endgültige Verwendung ist nicht ausreichend, da dies nicht die Absicht dieser Frage ist.
finalize()
. Allerdings Plattform Bibliothekscode , wie SocketInputStream
, die im Namen des Anrufers nativen Ressourcen verwaltet, nicht so zu versuchen , das Risiko von Ressourcenlecks zu minimieren (oder verwendet gleichwertige Mechanismen, wie zum Beispiel PhantomReference
, die später hinzugefügt wurden.) Also das Ökosystem sie braucht , obwohl 99,9999% der Entwickler niemals einen schreiben werden.