考虑一个类似于:
的工作循环...
auto msg = new immutable(DataWrittenMsg)(bytesWritten);
masterTid.send(msg);
...
当时间到达Inf时,这会慢慢但肯定会占用所有内存吗?或者GC可以收集未使用的不可变数据吗?
(我正在阅读TDPL Ch. 13,一旦设置了不可变数据,我就会得到印象,它永远不会被取消?)
答案 0 :(得分:10)
不,GC仍然会选择未引用的对象,无论它们的常量如何。
关于“一旦设置了不可变数据,它永远不会被取消” - 这只是在逻辑意义上。假设您的程序的内存安全性没有受到损害,程序可以访问的所有不可变堆分配对象只要它们可以访问就不会改变,即使这些对象变得无法访问时该地址的实际内存可以重用。