Che cosa è Finalize in Java?

February 18

Che cosa è Finalize in Java?


Java utilizza un sistema di raccolta dei rifiuti per la gestione della memoria. Anche se questo richiede un carico eccezionale fuori lo sviluppatore - non ha più per assicurare gli oggetti vengono rimossi manualmente dalla memoria quando non sono più in uso - si può anche togliere alcune funzionalità che gli sviluppatori di altri sfondi possono essere abituati a. Mentre la funzionalità finalizzazione non è esattamente lo stesso come distruttore C ++, può essere considerato più vicino a un analogo linguaggio Java fornisce.

Rapida panoramica di Garbage Collection

Garbage Collection è uno degli argomenti più avanzati in programmazione Java. A rigor di termini, gli sviluppatori Java possono andare intere carriere senza la necessità di conoscere molto circa il garbage collector e come funziona. In sostanza, ogni oggetto creato in un programma Java è stato registrato con il runtime Java, con un conteggio di tutti i luoghi c'è un riferimento esistente a quell'oggetto. Quando un oggetto non è più indicato per qualsiasi altro oggetto, il sistema lo contrassegna per la raccolta, e la prossima volta che il garbage collector viene eseguito, si elimina l'oggetto.

Memory Management di base in C ++

Le cose sono diverse in altri linguaggi di programmazione, ad esempio C ++, per esempio. In C ++, i controlli di sviluppo quando un oggetto viene rimosso dalla memoria, a differenza del sistema. Questo è noto come "gestione della memoria deterministica", e ha sia i suoi pro e contro. Il lato positivo primario di questo è che lo sviluppatore sa esattamente quando il codice l'oggetto viene eliminato. Tuttavia, è estremamente facile da eliminare un oggetto che potrebbe essere ancora in uso in altre parti del codice.

Distruttori e finalizzare

In C ++, gli sviluppatori possono aggiungere un distruttore di una classe, che è un metodo che viene chiamato ogni volta che un oggetto viene eliminato. Questo consente allo sviluppatore di eseguire codice quando non è più necessario l'oggetto, forse per cancellare i propri figli o per ripulire le risorse. In Java, il sistema fornisce il metodo finalizzazione, che gli sviluppatori possono eseguire l'override per fornire funzionalità simili. La differenza principale è che il metodo finalize viene chiamato ogni volta che il runtime determina che l'oggetto non ha ulteriori riferimenti e può essere raccolta.

Usare con cautela

Mentre finalizzazione in grado di fornire funzionalità simili a distruttore C ++ s ', in realtà dovrebbe essere usato con cautela. In generale, mentre l'override del metodo Finalize può essere perfettamente bene per la maggior parte delle situazioni, non si dovrebbe fare affidamento su di esso per garantire la pulizia delle risorse in un momento particolare. Ad esempio, se si dispone di una connessione di database aperto in un oggetto che è chiuso nel finalizzare, si può ancora potenzialmente creare troppe connessioni al database e superare il limite della banca dati prima che il garbage collector ha finalizzato tutti gli oggetti - anche se non avere più riferimenti a loro da nessuna parte.