2012-01-25 35 views
7

考慮工人循環,具有類似:D中的不可變數據是否「燒盡」RAM?

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

這是否會緩慢而穩步地吃了所有的RAM,隨着時間達到天道酬勤?或者GC可以收集未使用的不可變數據?

(我讀TDPL Ch. 13,我得到的印象是一次不可變的數據被設置它永遠無法得到未設置?)

回答

10

沒有,GC仍然會拿起未引用的對象,不管他們的常量性。

關於「一旦設置了不可變的數據,它永遠不會被取消設置」 - 這僅僅在邏輯意義上是如此。假設程序的內存安全性沒有受到影響,只要程序訪問到的所有不可變堆分配對象都可以訪問,即使這些地址的實際內存在這些對象無法訪問時可以重用,它們也不會改變。