Насколько удобен сборщик мусора LMAX Disruptor

Я пытаюсь понять, насколько разрушитель lmax совместим с GC. Я вижу, что объекты событий в кольце используются повторно, однако данные, установленные для этих объектов, находятся в куче, поэтому кажется, что преимущество сборки мусора ограничено одним объектом меньше для каждого события. если «данные» имеют примитивный тип данных, то в куче нет ничего дополнительного, поэтому преимущество в этом случае очень очевидно. Является ли на 1 объект меньше для GC за одно событие или это больше, чем я понимаю относительно GC.

Эта статья http://mechanitis.blogspot.com/2011/06/dissecting-disruptor-whats-so-special.html говорит, что сборщику мусора здесь практически нечего делать — для меня это не очень очевидно, отсюда и вопрос.


person vrtx54234    schedule 14.10.2020    source источник
comment
Вы читали комментарии под этой статьей? Автор говорит, что они используют примитивные данные, соответственно. байтовые массивы, которые они перерабатывают. Этот кольцевой буфер на самом деле не решает никаких проблем, что касается реальных проблем, применимо следующее предложение статьи: «Поскольку сам кольцевой буфер не отвечает за эти вещи, мы вынесли эти проблемы за пределы структура данных.  -  person Holger    schedule 14.10.2020


Ответы (1)


Кольцевой буфер действует как пул объектов — когда вы запрашиваете последовательность, вы можете копировать данные в событие, и когда все обработчики событий закончат обработку, событие будет снова возвращено в кольцевой буфер.

Хитрость заключается в том, чтобы убедиться, что вы копируете данные в событие и, следовательно, что событие может содержать все различные типы данных, которые вы, возможно, захотите передать между производителями и потребителями. Если вы просто выделяете объект в куче на стороне производителя и передаете ссылку на этот объект в событие, то вы, очевидно, вообще не уменьшите нагрузку на память в сборщике мусора.

Другой подход — событие, которое является просто смещением в некоторую память вне кучи, которое можно интерпретировать как различные типы объектов с помощью приспособлений.

person Slugart    schedule 03.02.2021
comment
Можете ли вы привести несколько примеров или ссылок для другого подхода, который вы упомянули. - person vrtx54234; 04.02.2021
comment
Вы можете увидеть пример в тестах производительности github.com/LMAX-Exchange/disruptor/blob/master/src/perftest/. Я также добавил ссылку на сообщение в блоге Мартина в своем ответе. - person Slugart; 04.02.2021