Подтвердить что ты не робот

Что такое объединение объектов на Java?

Что такое объединение объектов и что такое ссылка на слабый объект?

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

Проверьте общие пулы

предоставляет API-интерфейс для объединения объектов

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

Ответ 3

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

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

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

(Есть также Soft References и Phantom Ссылки, которые я оставляю здесь - они работают одинаково и добавляют больше уровней между ними.)

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

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

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

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

Ответ 4

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

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

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

Ответ 5

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

Ответ 6

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

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

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

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


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

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

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

Ответ 7

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

Ответ 8

Я подозреваю, что вы пытаетесь спросить о кеше SoftReference (не WeakReference). Я не могу найти его прямо сейчас, но я помню, как читал от кого-то, кто внедрил частную JVM, умоляя людей не использовать их. Он утверждал, что эти кэши предполагают, что автор сборщика мусора каким-то образом знает о ваших потребностях в кэшировании больше, чем вы (что никогда не должно быть правдой).

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