Nwlapcug.com


Che cosa è finalizzare in Java?



Java utilizza un sistema di garbage collection per la gestione della memoria. Mentre questo prende un carico eccezionale fuori lo sviluppatore - egli non ha bisogno di assicurare gli oggetti vengono rimossi manualmente dalla memoria quando non sono più in uso... può anche togliere alcune funzionalità che gli sviluppatori provenienti da altri ambienti possono essere abituati. Mentre la funzionalità di finalize non è esattamente lo stesso come un distruttore di C++, può essere considerato il più vicino a un analogo linguaggio Java fornisce.

Rapida panoramica di Garbage Collection

Garbage collection è uno degli argomenti più avanzati di programmazione Java. Strettamente parlando, gli sviluppatori Java possono andare tutta la carriera senza mai bisogno di sapere molto circa il garbage collector e come funziona. Essenzialmente, ogni oggetto creato in un programma Java è registrato con il runtime di Java, insieme con un conteggio di tutti i posti c'è un riferimento all'oggetto esistente. Quando un oggetto non viene definito non più di qualsiasi altro oggetto, il sistema contrassegna per collezione, e la prossima volta che il garbage collector viene eseguito, elimina tale oggetto.

Gestione della memoria di base in C++

Le cose sono diverse in altri linguaggi di programmazione, come C++, ad esempio. In C++, i controlli di sviluppatore quando un oggetto viene rimosso dalla memoria, al contrario del sistema. Questo è noto come "gestione memoria deterministico", e ha i suoi pro e i contro. Il primario più lato di questo è che lo sviluppatore sa esattamente quando nel codice l'oggetto viene eliminato. Tuttavia, è estremamente facile eliminare un oggetto che può essere ancora in uso altrove nel 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 agli sviluppatori di eseguire codice quando l'oggetto non è più necessario, forse per eliminare i suoi bambini o per pulire le risorse. In Java, il sistema fornisce il metodo finalize, che gli sviluppatori possono eseguire l'override per fornire una funzionalità simile. La differenza principale è che il metodo finalize viene chiamato ogni volta che il runtime determina che l'oggetto non ha ulteriori riferimenti e possa essere raccolto.

Usare con cautela

Mentre finalize può fornire funzionalità simili a distruttore di c + +, è davvero consigliabile utilizzarla con cura. In generale, mentre si esegue l'override del metodo finalize può essere perfettamente soddisfacente per la maggior parte delle situazioni, si dovrebbe fare affidamento su esso per garantire le risorse vengono eliminati in un determinato momento. Ad esempio, se hai una connessione di database aperta in un oggetto che è chiuso nel finalizzare, puoi ancora potenzialmente creare troppe connessioni al database e passare il limite del database prima che il garbage collector ha finalizzato tutti gli oggetti..--anche se non hai più riferimenti a loro ovunque.