埃菲尔并发垃圾回收

时间:2018-07-03 15:30:15

标签: concurrency garbage-collection eiffel

任何人都可以解释如何在eiffel中实现并发垃圾回收吗? 我发现的是有关顺序程序的垃圾收集的详细信息: -代劳 -扫一扫 -内存压缩

Eiffel处理并发(使用SCOOP)垃圾收集的方式不同吗? 使用SCOOP,可以将堆划分为每个单独对象的区域。解除分配特定对象的条件是什么?

1 个答案:

答案 0 :(得分:1)

支持SCOOP的垃圾收集器与常规垃圾收集器的主要区别在于,它不仅删除对象,而且还释放SCOOP处理器/区域。从根集开始跟踪活动对象,这些根集包括可从调用堆栈访问的对象,一旦函数生成。第一个(调用栈)是无条件的,即始终包含在根集中,因为相应的对象涉及某些计算。第二个(一次函数结果)是有条件的,因为仅当相应的处理器/区域也可访问时才应考虑它们。因此,GC应该同时跟踪活动对象和活动处理器/区域。

当处理器/区域不可访问时,应释放关联的线程和资源。因此,垃圾收集器不仅释放内存,还释放计算能力。假定活动对象和活动处理器/区域是相互依赖的,则算法会为活动对象和活动处理器/区域计算一个固定点。这与仅为活动对象计算固定点的传统GC不同。经过此计算后,可识别SCOOP的GC回收死对象和死处理器。可以在论文“处理器及其集合” 中找到对该算法的详细描述和一些基准。

关于对象垃圾回收,EiffelStudio中的实现当前使用您提到的算法:世代的清除,标记和清除,具有传统多线程适应性的内存压缩(当记录已处理的对象并考虑到写入时) GC。