‫Torneremo e questo tu.
‫Vorrei parlare della netturbina e di come si prende cura della memoria.
‫Quindi la garbage collection è uno strumento disponibile e più linguaggi di programmazione.
‫E in alcuni di essi, è fatto manualmente.
‫In altri è fatto automaticamente.
‫E il framework dot net fornisce una gestione automatica della memoria, il che significa che non è
‫necessario utilizzare manualmente il garbage collector come si fa in tutti i linguaggi di programmazione.
‫Quindi linguaggi di programmazione come C o C++ e altri, hanno una garbage collection manuale che devi eseguire di
‫tanto in tanto e devi sapere quando devi eseguirla.
‫Quindi è qualcosa che viene fatto automaticamente.
‫Intershop è per questo che non è qualcosa di simile.
‫Sì, molte persone usano molto spesso.
‫Quindi, una volta che hai programmi più complessi e davvero avanzati, inizierai a usarlo di tanto in tanto.
‫Ma in realtà, non è qualcosa che devi usare tutto il tempo o che devi usare del tutto nella maggior parte
‫dei casi.
‫Ecco perché non è un argomento importante, per così dire.
‫Va bene.
‫Quindi diciamo che abbiamo questo oggetto chiamato Dennis ed è di tipo umano.
‫Quindi ho creato una classe chiamata umana, e ci sono più proprietà diverse e così via.
‫Quindi, alla fine, sto solo creando un oggetto di tipo umano.
‫E questo si chiama Dennis.
‫E così facendo, usando questa nuova parola chiave, richiedo memoria perché crea un oggetto nella mia memoria.
‫Quindi assegna la memoria per noi.
‫E il framework si occupa di recuperare la memoria per l'utilizzo nel sistema una volta che gli oggetti non vengono più
‫utilizzati.
‫Quindi, in questo caso, sto creando questo oggetto e quindi potrei usarlo e potrei usarlo ancora e ancora.
‫Ma a un certo punto non lo userò più e forse taglierò anche i riferimenti ad esso.
‫E poi, sì, il netturbino lo pulirà perché questa memoria è ora bloccata e il garbage
‫collector deve ripulire.
‫Quindi deve rendere nuovamente disponibile questa memoria per altri oggetti, ad esempio.
‫Ora, diamo un'occhiata da una prospettiva visiva, quindi abbiamo questo pool di memoria di sistema sul lato sinistro
‫e il nostro programma sul lato destro e il pool di memoria di sistema ha un sacco di memoria.
‫Quindi possiamo usare questa memoria per più programmi diversi.
‫Ma ora abbiamo il nostro programma che lo esegue.
‫Ora nel nostro programma creiamo un oggetto.
‫Ora, improvvisamente, abbiamo bisogno di un po' di spazio nella nostra memoria.
‫Va bene.
‫Quindi c'è un riferimento dal nostro programma a quella memoria in cui è archiviato il nostro oggetto.
‫Va bene.
‫Quindi c'è un riferimento diretto e possiamo riutilizzarlo e possiamo chiamarlo da punti diversi e così via.
‫Va bene.
‫E poi ne abbiamo un altro e un altro ancora.
‫Quindi abbiamo più oggetti diversi che abbiamo creato e ogni volta creeremo il nuovo oggetto.
‫C'è una memoria allocata nel pool di memoria e c'è un riferimento dal nostro programma a quella memoria.
‫Quindi questi riferimenti ci sono.
‫Quindi c'è un riferimento dal nostro programma al pool di memoria.
‫Ora, a un certo punto, il riferimento potrebbe essere cancellato.
‫Quindi forse eliminiamo il riferimento impostando una variabile ora o impostando l'oggetto null e quindi il riferimento
‫improvvisamente sparito.
‫Ora, non c'è più alcun riferimento dal nostro programma a questa piccola posizione di memoria qui.
‫Quindi il nostro netturbino se ne accorge e dice: OK, non c'è alcun riferimento.
‫Quindi questo piccolo pezzo di memoria non viene mai utilizzato.
‫Quindi ripuliamolo o vediamo, ho localizzato o ci siamo semplicemente liberati per un'altra posizione ed è quello che succede
‫poi.
‫Quindi ora diamo un'occhiata a un esempio di quando il garbage collector entrerebbe in funzione, e ho una funzione qui
‫chiamata my function e sto creando un oggetto qui.
‫Di nuovo, si chiama Dennis.
‫E poi Dennis chiama i suoi metodi o noi chiamiamo il suo metodo, come insegnare.
‫Quindi impostiamo la sua età e poi chiamiamo un altro metodo, invecchia e così via.
‫Ma a un certo punto, questo oggetto dunnies nella memoria non è più necessario perché la chiamata alla funzione è
‫terminata.
‫Quindi la funzione finisce, l'oggetto.
‫Dennis esce dall'ambito e non ci sono più riferimenti a Dennis perché la mia funzione è una funzione
‫e abbiamo questo oggetto che è all'interno di una funzione.
‫Quindi l'ambito di esso è all'interno della funzione.
‫Quindi, una volta terminata la chiamata alla funzione, non c'è più alcun riferimento diretto ad essa perché non possiamo fare riferimento a
‫un oggetto che si trova all'interno di una funzione dall'esterno di questa funzione.
‫Destra.
‫Quindi dovremmo creare campi per questo o fare altri approcci per questo.
‫Ma alla fine, il netturbino, che sta ripulendo questo, poi è e rialloca questa memoria.
‫E l'idea generale qui è che questo è solo un semplice esempio.
‫Ci sono molte altre situazioni in cui il netturbino entrerebbe in funzione, ma questo è qualcosa che
‫abbiamo già usato.
‫Quindi i concetti che puoi vedere qui, li abbiamo già visti in altri video o lezioni di questo
‫corso.
‫Ecco perché ho scelto questo esempio.
‫Quindi cosa c'è da sapere sulla raccolta dei rifiuti?
‫Bene, non è necessario chiamare manualmente il raccoglitore di rifiuti, ma è possibile farlo manualmente.
‫Il Garbage Collector richiede potenza di elaborazione.
‫Quindi è su un thread separato ed è molto leggero.
‫Tuttavia, è necessaria una certa potenza di elaborazione.
‫L'obiettivo dei raccoglitori di rifiuti è quello di liberare memoria, ma non utilizzare troppa potenza di elaborazione.
‫Quindi non avrà bisogno di molta potenza di elaborazione in generale, ma non verrà chiamato tutto il tempo
‫o il garbage collector non funzionerà tutto il tempo per liberare memoria.
‫Funzionerà solo quando è necessario o quando ritiene necessarie cose necessarie.
‫Quindi questa è davvero la parte difficile qui.
‫La memoria non è necessariamente recuperata subito.
‫Potrebbe volerci un po' di tempo prima che il garbage collector, anche se lo chiami manualmente, non debba essere
‫eseguito immediatamente.
‫Quindi queste sono alcune cose complicate sul raccoglitore di rifiuti che puoi implementare per finalizzare un metodo per eseguire
‫il codice appena prima che un oggetto venga rilasciato dalla memoria dal raccoglitore di rifiuti.
‫Ciò significa che se decidi di eseguire un codice specifico appena prima che un oggetto venga ripulito, quindi appena prima che il garbage
‫collector lo pulisca.
‫Quindi, una volta che non ci sono più riferimenti ad esso, ad esempio, puoi usare il metodo final lizer
‫all'interno di questa classe per implementare la funzionalità specifica che vuoi che eseguano.
‫Forse vuoi ripulire le cose da solo appena prima che il netturbino entri e pulisca il
‫tuo oggetto o si sposti in memoria o rilasci questo oggetto dalla memoria.
‫Va bene.
‫Quando viene eseguito il netturbino?
‫Bene, quando il sistema ha una piccola memoria fisica, quando la memoria allocata supera la soglia
‫preimpostata, quando viene chiamato il metodo di raccolta o raccolta dei rifiuti, anche se questo è un metodo super
‫complicato.
‫Quindi questo è qualcosa che è.
‫Sì, molto specifico.
‫Molto speciale.
‫Se vuoi saperne di più, dovresti controllare la documentazione sul garbage collector.
‫Ma il metodo di raccolta non viene sempre chiamato immediatamente e non pulisce direttamente tutto.
‫È più come dare un suggerimento allo strumento.
‫Quindi stai dicendo, OK, netturbino.
‫Personalmente penso che sarebbe un buon punto o un buon posto per raccogliere la spazzatura, ma in alcuni casi potrebbe
‫non accettarlo o potrebbe farlo più tardi o qualcosa del genere.
‫Forse ha appena fatto la raccolta dei rifiuti e decide che non è necessario o qualcosa del genere.
‫Quindi è molto difficile.
‫Se vuoi saperne di più, dai un'occhiata alla documentazione.
‫Ma penso che questo sia un buon punto di partenza per capire cosa fa il netturbino.
‫E come ho detto, nella maggior parte dei casi, non ne avrai bisogno perché al giorno d'oggi abbiamo così tanta memoria e che se non
‫hai enormi perdite di memoria nei tuoi programmi, non dovresti mai incorrere in questi problemi.