LMAX Disruptor 垃圾收集器如何友好

How is LMAX Disruptor garbage collector friendly

我正在尝试了解 lmax disruptor 对 GC 的友好程度。我看到环上的事件对象被重新使用,但是,在这些对象上“设置”的“数据”在堆上,所以感觉垃圾收集的好处仅限于每个事件少 1 个对象。如果 'data' 是原始数据类型,那么堆上就没有额外的东西了,所以这种情况下的好处是非常明显的。是每个事件对 GC 少 1 个对象重要还是比我理解的更多 w.r.t GC。

这篇文章 http://mechanitis.blogspot.com/2011/06/dissecting-disruptor-whats-so-special.html 垃圾收集器在这里几乎没有什么可做的 - 这对我来说不是很明显,因此问题。

环形缓冲区充当对象池 - 当您声明一个序列时,您可以将数据复制到事件中,当所有事件处理程序完成处理后,事件将再次返回到环形缓冲区。

诀窍是确保将数据复制到事件中,因此事件可以保存您可能希望在生产者和消费者之间进行通信的所有不同类型的数据。如果只是简单的在producer端在heap上分配一个对象,然后把这个对象的引用传递给event,那么显然根本不会减轻GC的内存压力。

Another approach 是要有一个事件,它只是一些堆外内存的偏移量,可以通过使用享元将其解释为不同类型的对象。