标记-清扫回收器(编译原理课程展示)湖南大学软件工程陈沅陇基本的标记-清扫式回收器标记-清扫式垃圾回收器是一种直接的全面停顿算法。它们找出所有不可达的对象,并将它们放入空闲列表Free。清扫过程分为标记阶段和清扫阶段。/*标记阶段*//*把根集所引用的对象reached位设置为1,并加入Unscanned集合中*/while(Unscanned!=){∅从Unscanned列表中删除某个对象o;for(在o中引用的每个对象o’){if(o’的reached位为0,即未被访问){将o’的reached为设置为1;将o’放到unscaned中;}}}/*清扫阶段*/free=;∅for(堆区的每个内存块o){if(o未访问到,即它的reached为0)将o加入到Free中;else将o的reached位设置为0;}基本的标记-清扫式回收器堆区o1o2o3o4o5o6o7o8o9UnscannedFree/*标记阶段*//*把根集所引用的对象reached位设置为1,并加入Unscanned集合中*/while(Unscanned!=){∅从Unscanned列表中删除某个对象o;for(在o中引用的每个对象o’){if(o’的reached位为0,即未被访问){将o’的reached为设置为1;将o’放到unscaned中;}}}/*清扫阶段*/free=;∅for(堆区的每个内存块o){if(o未访问到,即它的reached为0)将o加入到Free中;else将o的reached位设置为0;}跳转到清扫后基本的标记-清扫式回收器堆区o1o2o3o4o5o6o7o8o9UnscannedFree/*标记阶段*//*把根集所引用的对象reached位设置为1,并加入Unscanned集合中*/while(Unscanned!=){∅从Unscanned列表中删除某个对象o;for(在o中引用的每个对象o’){if(o’的reached位为0,即未被访问){将o’的reached为设置为1;将o’放到unscaned中;}}}/*清扫阶段*/free=;∅for(堆区的每个内存块o){if(o未访问到,即它的reached为0)将o加入到Free中;else将o的reached位设置为0;}o1.r=1o4.r=1基本的标记-清扫式回收器o1o2o3o4o5o6o7o8o9UnscannedFree/*标记阶段*//*把根集所引用的对象reached位设置为1,并加入Unscanned集合中*/while(Unscanned!=){∅从Unscanned列表中删除某个对象o;for(在o中引用的每个对象o’){if(o’的reached位为0,即未被访问){将o’的reached为设置为1;将o’放到unscaned中;}}}/*清扫阶段*/free=;∅for(堆区的每个内存块o){if(o未访问到,即它的reached为0)将o加入到Free中;else将o的reached位设置为0;}deleteo1.r=1o4.r=1堆区基本的标记-清扫式回收器o1o2o3o4o5o6o7o8o9UnscannedFree/*标记阶段*//*把根集所引用的对象reached位设置为1,并加入Unscanned集合中*/while(Unscanned!=){∅从Unscanned列表中删除某个对象o;for(在o中引用的每个对象o’){if(o’的reached位为0,即未被访问){将o’的reached为设置为1;将o’放到unscaned中;}}}/*清扫阶段*/free=;∅for(堆区的每个内存块o){if(o未访问到,即它的reached为0)将o加入到Free中;else将o的reached位设置为0;}deleteo1.r=1o4.r=1堆区o3.r=1o8.r=1基本的标记-清扫式回收器o2o3o4o5o6o7o8o9UnscannedFree/*标记阶段*//*把根集所引用的对象reached位设置为1,并加入Unscanned集合中*/while(Unscanned!=){∅从Unscanned列表中删除某个对象o;for(在o中引用的每个对象o’){if(o’的reached位为0,即未被访问){将o’的reached为设置为1;将o’放到unscaned中;}}}/*清扫阶段*/free=;∅for(堆区的每个内存块o){if(o未访问到,即它的reached为0)将o加入到Free中;else将o的reached位设置为0;}deleteo1.r=1o4.r=1o3.r=1o8.r=1堆区基本的标记-清扫式回收器o2o3o4o5o6o7o8o9UnscannedFree/*标记阶段*//*把根集所引用的对象reached位设置为1,并加入Unscanned集合中*/while(Unscanned!=){∅从Unscanned列表中删除某个对象o;for(在o中引用的每个对象o’){if(o’的reached位为0,即未被访问){将o’的reached为设置为1;将o’放到unscaned中;}}}/*清扫阶段*/free=;∅for(堆区的每个内存块o){if(o未访问到,即它的reached为0)将o加入到Free中;else将o的reached位设置为0;}deleteo1.r=1o4.r=1o3.r=1o8.r=1堆区o7.r=1o6.r=1基本的标记-清扫式回收器o2o5o9UnscannedFree/*标记阶段*//*把根集所引用的对象reached位设置为1,并加入Unscanned集合中*/while(Unscanned!=){∅从Unscanned列表中删除某个对象o;f...