Salve, sinceramente non sapevo se bisogna etichettarla come guida o come informazione, fatto sta' che sono qui per parlarvi della Gestione automatica della memoria.
La gestione della memoria si occupa di tutti i problemi legati all'assegnazione della memoria per le variabili e gli oggetti. I lnguaggi di programmazione gestiscono la memoria in modi diversi: ci sono linguaggi che lasciano questo compito al programmatore e altri che rendono il più possibile trasparente la gestione della memoria.
Tra i compiti di un gestore della memoria, oltre all'allocazione, vi è la deallocazione. Un buon gestore deve essere in grado di mantenere libera più memoria possibile per assegnarla quando ne verrà fatta richiesta.
Java mette a disposizione un gestore automatico della memoria che si occupa di tutti i compiti legati all'allocazione e deallocazione della memoria. Il programmatore interagisce con questo gestore solo quando usa l'oeratore new per creare nuovi oggetti.
Quando un oggetto viene creato, viene allocata la memoria di cui ha bisogno. Questa memoria varia a seconda del numero di attributi di cui è composto. Mentre l'oggetto viene utilizzato, la memoria resta riservata. Quando un oggetto non è più usato, la memoria dovrebbe essere deallocata e resa disponibile per altri oggetti.
In Java la deallocazione è eseguita in modo automatico.
Una parte impostante dell'interprete Java è il Garbage Collector (letteralmente, raccoglitore di spazzatura): è un sistema automatico che si preoccupa di recuperare le parti di memoria inutilizzae per metterle a disposizione del programma. Il garbage Collector tiene traccia dello stato di tutti gli oggetti: quando si accorge che un certo oggetto non viene più usato, interviene per liberare la memoria occupata e renderla disponibile.
Questo modo di gestire la memoria presuppone che il Garbage Collector resti attivo durante tutta l'esecuzione di un applicazione Java. E' quindi un esempio di PROCESSO CONCORRENTE, che viene eseguito in sincronia con un altro programma.
Il vantaggio di avere un gestore di memoria automatico si traduce in una semplificazione del linguaggio e nell'eliminazione di errori di programmazione dovuti alla gestione dei puntatori alla memoria.
Il gestore della memoria può stabilire che un oggetto non è più utilizzato contando il numero di riferimenti a quell'oggetto.
Si consideri per esempio l'istruzione:
Essa crea un riferimento a un oggetto di classe String. L'oggetto ha un solo riferimento contenuto in S.
Le seguenti istruzioni creano altri riferimenti all'oggetto:
String s1= s;
String s2= s;
Un oggetto che possiede riferimenti può essere utilizzanto e quindi deve erestare allocato in memoria. Quando il numero di riferimento a quell'oggetto è = a 0, quindi non si utilizza più, ed è qui che entra in gioco il Garbage Collector.
La memoria occupata da tutti gli oggetti non più accessibili può essere liberata per altri utilizzi.
Il garbage collector controlla costantemente gli oggetti per verificare se il numero dei riferimenti di essi è = 0.
GLi oggetti non possono essere distrutti dal programmatore: la deallocazione viene fatta in modo automatico dal Garbage Collector. Quello che può fare il programmatore è impostare tutti i riferimenti ad un particolare oggetto con il valore "null".
I metodi costruttori vengono eseguiti quando un nuovo oggetto viene istanziato.
Esistono altri metodi, che vengono richiamati automaticamente prima che un oggetto venga eliminato.
Quando un oggetto non è più usato, e prima che il garbage collector provveta, alla sua eliminazione viene eseguito un metodo particolare. chiamato finalizzatore.
Questo metodo è utile per eseguire le azioni che evitino una brusca eliminazione dell'oggetto.
Tra queste ci sono le operazioni di chiusura di eventuali file aperti dall'oggetto.
La dichiarazione di un finalizzatore avviene sovrascrivendo il metodo finaliza, che è un metodo della classe Object e quindi viene ereditato da tutti gli oggetti. Il metodo deve essere dichiarato in questo modo:
Va bene. Abbiamo finito, spero vi sia di utile apprendimento, e' un argomento molto importante che può essere utile nel caso della programmazione di un Videogames o comunque qualsiasi altro programma di livello professionale.
:bye:
Alla prossima.
La gestione della memoria si occupa di tutti i problemi legati all'assegnazione della memoria per le variabili e gli oggetti. I lnguaggi di programmazione gestiscono la memoria in modi diversi: ci sono linguaggi che lasciano questo compito al programmatore e altri che rendono il più possibile trasparente la gestione della memoria.
Tra i compiti di un gestore della memoria, oltre all'allocazione, vi è la deallocazione. Un buon gestore deve essere in grado di mantenere libera più memoria possibile per assegnarla quando ne verrà fatta richiesta.
Java mette a disposizione un gestore automatico della memoria che si occupa di tutti i compiti legati all'allocazione e deallocazione della memoria. Il programmatore interagisce con questo gestore solo quando usa l'oeratore new per creare nuovi oggetti.
Quando un oggetto viene creato, viene allocata la memoria di cui ha bisogno. Questa memoria varia a seconda del numero di attributi di cui è composto. Mentre l'oggetto viene utilizzato, la memoria resta riservata. Quando un oggetto non è più usato, la memoria dovrebbe essere deallocata e resa disponibile per altri oggetti.
In Java la deallocazione è eseguita in modo automatico.
Una parte impostante dell'interprete Java è il Garbage Collector (letteralmente, raccoglitore di spazzatura): è un sistema automatico che si preoccupa di recuperare le parti di memoria inutilizzae per metterle a disposizione del programma. Il garbage Collector tiene traccia dello stato di tutti gli oggetti: quando si accorge che un certo oggetto non viene più usato, interviene per liberare la memoria occupata e renderla disponibile.
Questo modo di gestire la memoria presuppone che il Garbage Collector resti attivo durante tutta l'esecuzione di un applicazione Java. E' quindi un esempio di PROCESSO CONCORRENTE, che viene eseguito in sincronia con un altro programma.
Il vantaggio di avere un gestore di memoria automatico si traduce in una semplificazione del linguaggio e nell'eliminazione di errori di programmazione dovuti alla gestione dei puntatori alla memoria.
Il gestore della memoria può stabilire che un oggetto non è più utilizzato contando il numero di riferimenti a quell'oggetto.
Si consideri per esempio l'istruzione:
Codice:
Perfavore,
Entra
oppure
Registrati
per vedere i codici!
Essa crea un riferimento a un oggetto di classe String. L'oggetto ha un solo riferimento contenuto in S.
Le seguenti istruzioni creano altri riferimenti all'oggetto:
String s1= s;
String s2= s;
Un oggetto che possiede riferimenti può essere utilizzanto e quindi deve erestare allocato in memoria. Quando il numero di riferimento a quell'oggetto è = a 0, quindi non si utilizza più, ed è qui che entra in gioco il Garbage Collector.
La memoria occupata da tutti gli oggetti non più accessibili può essere liberata per altri utilizzi.
Il garbage collector controlla costantemente gli oggetti per verificare se il numero dei riferimenti di essi è = 0.
GLi oggetti non possono essere distrutti dal programmatore: la deallocazione viene fatta in modo automatico dal Garbage Collector. Quello che può fare il programmatore è impostare tutti i riferimenti ad un particolare oggetto con il valore "null".
I metodi costruttori vengono eseguiti quando un nuovo oggetto viene istanziato.
Esistono altri metodi, che vengono richiamati automaticamente prima che un oggetto venga eliminato.
Quando un oggetto non è più usato, e prima che il garbage collector provveta, alla sua eliminazione viene eseguito un metodo particolare. chiamato finalizzatore.
Questo metodo è utile per eseguire le azioni che evitino una brusca eliminazione dell'oggetto.
Tra queste ci sono le operazioni di chiusura di eventuali file aperti dall'oggetto.
La dichiarazione di un finalizzatore avviene sovrascrivendo il metodo finaliza, che è un metodo della classe Object e quindi viene ereditato da tutti gli oggetti. Il metodo deve essere dichiarato in questo modo:
Codice:
Perfavore,
Entra
oppure
Registrati
per vedere i codici!
Va bene. Abbiamo finito, spero vi sia di utile apprendimento, e' un argomento molto importante che può essere utile nel caso della programmazione di un Videogames o comunque qualsiasi altro programma di livello professionale.
:bye:
Alla prossima.