Garbage collection: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
ValterVBot (discussione | contributi)
m tag source deprecati, replaced: <source lang= → <syntaxhighlight lang= (2), </source> → </syntaxhighlight> (2)
Riga 40:
 
L'identificazione delle aree di memoria ''spazzatura'' con quelle non raggiungibili non è ottimale, in quanto potrebbe accadere che un programma utilizzi per l'ultima volta una certa area molto prima che questa diventi irraggiungibile. A volte si distingue perciò fra spazzatura '''sintattica''', quando l'oggetto ''non può'' essere raggiunto dal programma, e '''semantica''', quando il programma ''non vuole'' più utilizzare l'oggetto. Ad esempio:
<sourcesyntaxhighlight lang="java">
Object x = new Foo();
Object y = new Bar();
Riga 58:
* valore; ciò sempre ammesso che effettivamente termini in un tempo finito
*/
</syntaxhighlight>
</source>
 
Il problema di individuare precisamente la spazzatura semantica è purtroppo solo parzialmente [[decidibilità|decidibile]]: dall'esempio mostrato sopra, infatti, è chiaro che l'identificazione positiva di un oggetto come spazzatura semantica dipende dal fatto che le elaborazioni precedenti terminino correttamente in un tempo finito. Ciò comporta che un collector che volesse identificare la spazzatura semantica dovrebbe poter decidere, sempre in un tempo finito, se una certa procedura termini ([[problema della fermata]]). Pertanto, essenzialmente tutti i collectors implementati si concentrano sulla spazzatura sintattica.
Riga 163:
 
==Esempio (Java)==
<sourcesyntaxhighlight lang="java">
class A {
final int finalValue;
Riga 183:
}
}
</syntaxhighlight>
</source>
 
In questo esempio il costruttore della classe A passa la nuova istanza di A a <code>B.doSomething</code>, quindi il compilatore non può garantire che il puntatore non sopravviva al costruttore: il puntatore "escapes", fugge.