什么是"大多数并发垃圾收集器"?

Eon*_*nil 9 garbage-collection concurrent-collections

我知道stop-the-world,incremental,parallel,concurrent,(soft/hard)实时垃圾收集器的概念.但我无法理解大多数并发 GC.与并发GC不同吗?有什么不同?为什么它主要被称为?

Jon*_*rop 7

我知道stop-the-world,incremental,parallel,concurrent,(soft/hard)实时垃圾收集器的概念.但我无法理解大多数并发GC.与并发GC不同吗?有什么不同?为什么它主要被称为?

像许多其他主题一样,垃圾收集笼罩在术语含糊不清的迷雾中.Boehm以非传统方式使用传统术语特别臭名昭着,但我们应该原谅他,因为他在传统意义尚未僵化的时候开拓了这个领域!:-)

据我了解,stop-the-world GC是指在GC循环的整个持续时间内挂起所有mutator线程的算法,例如在标记整个堆时.例如,.NET Server GC会执行此操作,因此会产生大约300ms的暂停时间.增量GC在每个次要GC循环中执行一些主要的GC工作,例如OCaml GC中的"主要切片".并行意味着GC使用多个线程来加速收集垃圾的过程.并发GC意味着GC与mutator同时运行,例如.NET工作站GC.实时很难定义,最初意味着有限的最大暂停时间,但现在也意味着最小的mutator利用率(MMU),以避免GC从不允许它运行永远不会暂停mutator的病理问题!根据理查德琼斯的新书,动态GC一次不会暂停一个以上的变异器(即没有世界停止阶段),尽管我怀疑他的意思是变异器彼此独立地悬挂.最后,一个主要并发的GC是一个同时暂停所有mutator线程的GC,但只是在很短的时间内暂停,而不是任意长的GC循环.因此,允许mutator在GC运行时的大部分时间自由运行,因此,它被称为"大多数并发"GC.

"大多数并发"的分类很重要,因为大多数(所有?)主要GC都属于这一类,因为它在暂停时间和吞吐量之间提供了良好的平衡.例如,.NET工作站GC在获取全局根的快照时挂起所有mutator线程,但在标记和扫描时恢复它们.