in Java verwijdert de vuilnisverzamelaar automatisch de ongebruikte objecten om het geheugen vrij te maken. Ontwikkelaars hebben geen noodzaak om de objecten te markeren voor verwijdering, die foutgevoelig en kwetsbaar is voor het geheugenlek. Dus het is verstandig Java heeft geen destructors beschikbaar.
als de objecten open sockets, open bestanden of databaseverbindingen bevatten, kan de vuilnisverzamelaar deze bronnen niet terugwinnen. We kunnen de bronnen in close method vrijgeven en proberen-eindelijk syntaxis gebruiken om de methode daarna aan te roepen voor Java 7, zoals de I/O klassen FileInputStream en FileOutputStream. Vanaf Java 7 kunnen we interface AutoCloseable implementeren en try-with-resources statement gebruiken om kortere en schonere code te schrijven. Maar het is mogelijk dat de API-gebruikers vergeten om de close-methode te bellen, zodat de afwerking methode en schonere klasse ontstaan om op te treden als het vangnet. Maar wees gewaarschuwd dat ze niet gelijk zijn aan de destructor.
het is niet zeker dat zowel de finalize methode als de Cleaner klasse snel zullen draaien. Ze krijgen zelfs geen kans om te rennen voordat de JVM uit gaat. Hoewel we het systeem kunnen bellen.runFinalization om te suggereren dat JVM de finalize methoden uitvoert van alle objecten die in afwachting zijn van de finalization, is het nog steeds niet-deterministisch. Bovendien kan de finalize-methode prestatieproblemen, deadlocks enz. veroorzaken. We kunnen meer informatie vinden door te kijken naar een van onze artikelen: a Guide to the finalize Method in Java. Met ingang van Java 9, Cleaner klasse wordt toegevoegd aan de finalize methode te vervangen vanwege de nadelen die het heeft. Hierdoor hebben we een betere controle over de draad die de reinigingsacties doet. Maar de java spec wijst op het gedrag van schoonmakers tijdens het systeem.exit is implementatiespecifiek en Java biedt geen garanties of opschoonacties worden aangeroepen of niet.