Что такое пул объектов в Java? - PullRequest
29 голосов
/ 07 февраля 2011

Что такое пул объектов и что такое слабая ссылка на объект?

Как мы можем реализовать их с помощью Java?

Ответы [ 7 ]

34 голосов
/ 07 февраля 2011

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

Обычно пул объектов обрабатывается сервером приложений Java EE. Если вам нужно сделать это самостоятельно, лучше всего использовать что-то вроде пула объектов Apache. Не пиши себе; безопасность потоков и другие проблемы могут усложнить задачу.

Вот хорошая ссылка на слабые ссылки на объекты.

14 голосов
/ 07 февраля 2011

Чек общие бассейны

предоставляет API пула объектов

Обычно используется для объектов, создание которых стоит дорого. Чтобы избежать этого, вы поддерживаете пул из N предварительно созданных объектов и используете их повторно.

6 голосов
/ 07 февраля 2011

Слабая ссылка - это разновидность ссылочной переменной, которая специально обрабатывается сборщиком мусора.

Это вводит другой вид достижимости, любой объект может быть:

  • сильно достижимо (доступно из любого жизненного потока только по нормальным ссылкам)
  • слабо достижимо (не достижимо сильно, но доступно по слабой ссылке (или несколькими способами, каждый из которых включает слабую ссылку))
  • вообще недоступен

(Есть также Мягкие ссылки и Фантомные ссылки , которые я здесь опускаю - они работают аналогично и вводят больше уровней между ними.)

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

(На самом деле существует / может быть этап завершения между «недостижимым» и коллекцией, что также может сделать объект снова достижимым.)

Для использования Слабых ссылок вы можете использовать класс java.lang.ref.WeakReference - фактическая ссылка находится в закрытой переменной этого класса и может быть установлена ​​только с помощью конструктора, а затем очищена. Вы можете создать подкласс этого класса, если вам нужны другие данные, кроме самой ссылки, которая все еще должна быть там, когда ссылка очищена.

Для пула объектов в смысле «избегать дорогостоящих реализаций» слабая ссылка не является правильным инструментом.

4 голосов
/ 07 февраля 2011

Пул объектов - это любая коллекция объектов, которые перерабатываются, а не воссоздаются каждый раз, когда они необходимы.

Существует несколько способов реализации такого пула объектов в зависимости от ваших требований.Пулы объектов используются для повышения производительности даже для простых объектов, но не так полезны в Java 5+.

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

3 голосов
/ 15 апреля 2015

Идея шаблона пула объектов аналогична идее библиотеки.Каждый из нас знает, что дешевле и проще пойти в библиотеку и взять книгу вместо того, чтобы покупать ее. Точно так же дешевле (в отношении системной памяти и скорости) процесс заимствовать объект, а не создавать его экземпляр.Поэтому такой процесс, в котором процесс заимствует объект у другого процесса, называется пулом объектов.

2 голосов
/ 07 февраля 2011

Объединение и объединение объектов:

Пул в основном означает эффективное использование ресурсов, ограничивая доступ объектов только тем периодом, когда этого требует клиент.

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

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


Слабый эталонный объект:

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

Помните, что GC всегда, используя некоторые алгоритмы, восстанавливает слабодоступные объекты.

0 голосов
/ 19 июня 2014

Я реализовал простой ObjectPool в Java, см. Здесь Это не использует слабую ссылку на объект, хотя. Цель слабой ссылки на объект, чтобы позволить собирать память объекта, даже если есть ссылки на объект, но они являются слабыми. Это более полезно для кэшей, чем для пулов объектов, хотя может использоваться и для них.

...