2012-01-25 2 views
7

consideri un ciclo di lavoro che ha qualcosa come:I dati immutabili "bruciano" la RAM in D?

... 
auto msg = new immutable(DataWrittenMsg)(bytesWritten); 
masterTid.send(msg); 
... 

sarà questo lentamente, ma sicuramente mangiare tutta la RAM, come tempo raggiunge Inf? Oppure i dati immutabili non utilizzati possono essere raccolti dal GC?

(sto leggendo TDPL Ch. 13 e ho l'impressione una volta che i dati immutabile è impostata non potrà mai ottenere unset?)

risposta

10

No, il GC sarà ancora raccogliere oggetti senza riferimenti, indipendentemente dalla loro costanza.

Per quanto riguarda "una volta che i dati immutabili sono impostati non può mai essere disinserito" - questo è solo in senso logico. Supponendo che la sicurezza della memoria del tuo programma non sia compromessa, tutti gli oggetti immutabili allocati su heap a cui il programma ha accesso non cambieranno fintanto che saranno raggiungibili, anche se la memoria effettiva a quell'indirizzo può essere riutilizzata una volta che tali oggetti diventano irraggiungibili.