Не выгорают ли неизменяемые данные ОЗУ в D? - PullRequest
7 голосов
/ 26 января 2012

Рассмотрим рабочий цикл, который имеет что-то вроде:

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

Будет ли это медленно, но верно поглощать всю оперативную память, когда время достигнет Inf? Или неиспользованные неизменяемые данные могут быть собраны GC?

(я читаю TDPL Ch. 13 , и у меня складывается впечатление, что после установки неизменяемых данных они никогда не могут быть сброшены?)

1 Ответ

10 голосов
/ 26 января 2012

Нет, сборщик мусора все еще будет собирать объекты, на которые нет ссылок, независимо от их константности.

Относительно «когда неизменные данные установлены, они никогда не могут быть сброшены» - это только так в логическом смысле. Если предположить, что безопасность памяти вашей программы не нарушена, все неизменяемые объекты, выделенные в куче, к которым у вашей программы есть доступ, не изменятся, пока они достижимы, даже если фактическая память по этому адресу может быть повторно использована, как только эти объекты станут недоступными.

...