există un Destructor în Java?

fotografie de Jos Alejandro Cuffia pe Unsplash

în Java, colectorul de gunoi șterge automat obiectele neutilizate pentru a elibera memoria. Dezvoltatorii nu au nevoie să marcheze obiectele pentru ștergere, care este predispusă la erori și vulnerabilă la scurgerea de memorie. Deci, este sensibil Java nu are destructoare disponibile.

în cazul în care obiectele dețin prize deschise, fișiere deschise sau conexiuni de baze de date, colectorul de gunoi nu este capabil să recupereze aceste resurse. Putem elibera resursele în metoda apropiată și putem folosi sintaxa try-finally pentru a apela metoda după aceea înainte de Java 7, cum ar fi clasele I/O FileInputStream și FileOutputStream. Începând cu Java 7, putem implementa interfața AutoCloseable și putem folosi instrucțiunea try-with-resources pentru a scrie cod mai scurt și mai curat. Dar este posibil ca utilizatorii API să uite să apeleze metoda close, astfel încât metoda de finalizare și clasa Cleaner să apară pentru a acționa ca plasă de siguranță. Dar vă rugăm să fiți atenționați că nu sunt echivalenți cu distrugătorul.

nu este asigurat atât metoda de finalizare și clasa Cleaner va rula cu promptitudine. Nu au nici o șansă să fugă înainte ca JVM să iasă. Deși am putea apela sistem.runFinalization pentru a sugera că JVM rulează metodele de finalizare a oricăror obiecte în așteptare pentru finalizare, este încă nedeterminist. Mai mult, metoda de finalizare poate provoca probleme de performanță, blocaje etc. Putem găsi mai multe informații uitându-ne la unul dintre articolele noastre: Un ghid pentru metoda finalizare în Java. Începând cu Java 9, Clasa Cleaner este adăugată pentru a înlocui metoda de finalizare din cauza dezavantajelor pe care le are. Ca rezultat, avem un control mai bun asupra firului care face acțiunile de curățare. Dar spec java subliniază comportamentul de curățare în timpul sistemului.ieșirea este specifică implementării și Java nu oferă garanții dacă acțiunile de curățare vor fi invocate sau nu.

Lasă un răspuns

Adresa ta de email nu va fi publicată.