一些(至少是Mono和.NET的)垃圾收集器具有它们经常扫描的短期存储区域,以及具有次要扫描频率的辅助存储区域。Mono将其称为托儿所。
为了找出可以丢弃的对象,它们扫描从根,堆栈和寄存器开始的所有对象,并处置所有不再被引用的对象。
我的问题是,它们如何防止所有使用中的内存在每次收集时都被扫描?原则上,找出不再使用哪些对象的唯一方法是扫描所有对象及其所有引用。但是,这将防止OS换出内存,即使应用程序未使用它,也感觉需要进行大量工作,对于“ Nursery Collection”也是如此。感觉他们并没有通过使用托儿所而获得太多收益。
我是否缺少某些东西?或者垃圾收集器实际上是在每次收集对象时扫描每个对象和每个引用吗?