Memory management RCU作为传统垃圾收集的替代品
读拷贝更新(RCU)是一种手动内存管理技术,在Linux内核中越来越流行Memory management RCU作为传统垃圾收集的替代品,memory-management,garbage-collection,rcu,Memory Management,Garbage Collection,Rcu,读拷贝更新(RCU)是一种手动内存管理技术,在Linux内核中越来越流行 是否有可能设计一种使用RCU而不是传统垃圾收集器来回收无法访问内存的语言和VM?是否有可能:是的,Linux内核就是一个活生生的例子 在linux内核中,当使用RCU时,数据结构早期版本的垃圾收集会在schedule()期间发生,因为此时已知所有读卡器都已完成 当然,Linux内核没有垃圾收集器,对不可访问内存的回收通常是显式的和即时的。RCU更新是一种特殊情况,其中回收是明确的,但不是立即的 像JavaScript的P
是否有可能设计一种使用RCU而不是传统垃圾收集器来回收无法访问内存的语言和VM?是否有可能:是的,Linux内核就是一个活生生的例子 在linux内核中,当使用RCU时,数据结构早期版本的垃圾收集会在
schedule()
期间发生,因为此时已知所有读卡器都已完成
当然,Linux内核没有垃圾收集器,对不可访问内存的回收通常是显式的和即时的。RCU更新是一种特殊情况,其中回收是明确的,但不是立即的
像JavaScript的Python那样的通用vm是否可能:这很难
- RCU需要一个垃圾收集器
- RCU主要用于读取工作负载
- RCU适用于较短的临界截面
c=1的update(last语句);d={c:42};d[c]=43
可以在内部使用RCU进行某些操作,但必须非常小心,因为c
可能只实现\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
恐怕我对编译语言及其虚拟机了解不够
我的直觉认为,新颖、高性能的垃圾收集器确实可以在内部使用RCU,然后可能会将RCU暴露于内置数据结构的实现中。我认为可能需要操作系统提供更好的API,以将执行锁定到特定的内核,从而从本地缓存中获益和/或在用户土地被抢占时运行自定义代码
虽然这不是一个完整的答案,但我希望这个扩展的评论有助于限定原始问题。这是一个互斥算法,而不是内存回收器。嗯,大多数情况下,无论如何。嗯,我读过的所有描述都表明,至少在一个宽限期之后,您可以释放旧数据,因此它看起来是相关的。嗯。我看不出RCU对象的活动“查看器”与任何其他引用计数实现有任何显著的不同。所以我想说,“RCU不是垃圾收集器,但它确实实现了类似于Refcounting本身的东西”,但在内部,RCU更像是一种设计模式,而不是GC。因此,这些可能不是您正在寻找的Droid,而您一直在寻找的GC的替代方案称为ARC(自动引用计数),即refcounting,其中编译器会自动为您生成所有添加和释放引用调用。“与任何其他引用计数实现有着显著的不同”。引用计数读屏障非常昂贵(通常是缓存未命中),而RCU读屏障非常便宜(并且可以免费)。这对我来说似乎是一个潜在的主要好处。我希望有人回答:(a)是的,有或(b)没有,这是不合适的,原因如下,因为我无法知道在内核空间之外是否可行,在内核空间之外,全局共享内存实现是标准,即每个进程都有自己的共享内存RCU堆。我怀疑内核中处理对象总数约为5000个对象的少数站点与扩展到数十亿个对象的GC实现可能没有太多共同点。