.NET的内存管理:排排坐,吃果果

幼儿园有个教室,这个教室里有3排座位,第一排是10个座位,第二排是20个座位,第三排是40个座位,有一个老师名叫CLR,C老师就给这个教室起了名字叫“托管堆”。每天,如果有小朋友拿着果果进来,C老师就给分配一个座位,C老师有一套自己的分配座位方式:

1. 如果第一排是空的,那就让来的小朋友依次在第一排座位上就坐,第一个进来的小朋友做第一个座位,第二个小朋友坐第二个座位,依次类推,进来的小朋友坐下后就开始吃果果(对托管堆对象的引用)

2. 过了一会儿,第一排座位坐满了,可是又有小朋友来了,怎么办呢?C老师就对第一排座位的小朋友挨个检查,看哪个小朋友已经吃完手里的果果了,让吃完的小朋友出去,让出座位来,没吃完的小朋友怎么办呢?吃的慢就到依次换到第二排去慢慢吃(产生第二代对象)。这样第一排的座位就都空出来了(垃圾回收完成),然后安排新来的小朋友坐在第一排的第一个座位上

3. 又过了一会儿,第一排座位又坐满了,C老师又要把其中一些没吃完的放在第二排,可是,发现第二排也坐满了,怎么办呢? 他就开始检查第二排的小朋友,哪个小朋友吃完了,就出去让出座位来,剩下的还没吃完了,再换到第三排继续吃(产生第三代对象),空出来的座位,让刚刚从第一排换来的小朋友坐。

原文地址:https://www.cnblogs.com/lbsong/p/1657522.html