Jaavalla roskankerääjä poistaa automaattisesti käyttämättömät esineet muistin vapauttamiseksi. Kehittäjillä ei ole tarvetta merkitä objekteja poistettavaksi, mikä on virhealtista ja altis muistivuodolle. Joten se on järkevää Java ei ole tuhoajia saatavilla.
jos kohteissa on avoimia pistorasioita, avoimia tiedostoja tai tietokantayhteyksiä, roskankerääjä ei voi vaatia näitä resursseja takaisin. Voimme vapauttaa resurssit close-menetelmällä ja käyttää try-finally-syntaksia kutsuaksemme menetelmää jälkeenpäin ennen Java 7: ää, kuten I/O-luokat FileInputStream ja FileOutputStream. Kuten Java 7, voimme toteuttaa käyttöliittymän Autokloseable ja käyttää try-with-resources lauseke kirjoittaa lyhyempi ja puhtaampi koodi. Mutta on mahdollista, että API-käyttäjät unohtavat kutsua close-menetelmää, joten finalize-menetelmä ja Cleaner-Luokka tulevat olemassaoloon toimimaan turvaverkkona. Mutta varoitan, etteivät ne vastaa tuhoajaa.
ei ole varmaa, että sekä finalize-menetelmä että Cleaner-Luokka toimivat nopeasti. He eivät ehdi edes juosta ennen JVM: n lähtöä. Vaikka voisimme soittaa järjestelmään.runFinalization ehdottaa, että JVM suorittaa finalize menetelmiä tahansa objektien vireillä viimeistely, se on vielä ei-deterministinen. Lisäksi finalize-menetelmä voi aiheuttaa suorituskykyyn liittyviä ongelmia, umpikujia jne. Voimme löytää lisätietoja katsomalla yksi artikkeleistamme: a Guide to the finalize Method in Java. Kuten Java 9, Cleaner luokka lisätään korvaamaan finalize menetelmä, koska haittoja se on. Tämän seurauksena meillä on parempi valvoa lanka, joka tekee puhdistustoimet. Mutta java spec huomauttaa käyttäytymistä siivoojat järjestelmän aikana.exit on toteutuskohtainen ja Java ei takaa, vedotaanko puhdistustoimiin vai ei.