2016-04-21 5 views
1

Я в настоящее время оптимизирую код, который периодически перезагружает огромное количество данных из базы данных. Каждый раз, когда выполняется эта операция, создаются и выпускаются объекты размером 800 тыс., Которые будут собраны в мусор, как только закончится операция.Как использовать библиотеку disruptor как пул объектов?

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

Теперь мой вопрос будет, если есть какой-либо пример проекта/кода, связанный только с пулом или кто-то может представить идеи, как справиться с этим с помощью разрушителя.

UPDATE Я нашел this GitHub репо, которые в основном реализуют решения с использованием пула дезинтегратора в фоновом режиме.

ответ

0

Концепция пула объектов используется в том месте, где вы можете взять объект (например, позаимствовать()), и вы должны вернуть объект (т. Е. Вызвать метод returnObject()) в пул , иначе пул объектов не удастся. Если вы можете снова вернуть объект для объединения, как только объект не нужен, попробуйте его. Это очень поможет.

0

Я не полностью уверен, что это действительно разрушает то, что вам нужно. Очень упрощенно

Разрушитель - это способ связаться с производителями и потребителями без блокировки и с эффективной обработкой памяти.

Более подробно ответ (here) дает полное объяснение внутренней работы реализации прерывания.

То, что вы, кажется, делают на основе этой постановки задачи:

... оптимизации кода, который перегружает огромное количество данных из базы данных периодически. Каждый раз, когда эта операция выполняется ~ 800k объекты созданы и выпущены для сборщика мусора ...

Для этой цели я бы только использовать простой механизм кэширования. Если вы загружаете данные один раз, а затем постоянно предоставляете доступ к ним для своих процессов каждый раз, когда они им нужны, ваша загрузка GC будет такой же оптимизированной, как и она. Что касается других проблем:

  • данные черствость
  • потребление памяти
  • параллельно читать и писать
  • т.д.

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

+0

Проблема заключается в том, что указанные объекты в настоящее время используются только как временные объекты и сразу же передаются в другое представление. Более поздние кешируются до следующего перезагрузки. Вся ситуация не идеальна, я согласен, но по нескольким причинам я не могу изменить общую обработку сейчас, но только забочусь о временных объектах. – u6f6o