Я очень хорошо знаком с концепцией пула объектов и всегда стараюсь максимально использовать ее.
Кроме того, я всегда думал, что пул объектов является стандартной нормой, так как я заметил, что как сама Java, так и другие платформы используют пул в максимально возможной степени.
Хотя недавно я прочитал что-то совершенно новое (и нелогичное?) Для меня.
Такое объединение фактически ухудшает производительность программы, особенно в параллельных приложениях, и рекомендуется new
вместо этого создавать экземпляры объектов, поскольку в более новых JVM создание объекта действительно очень быстро.
Я прочитал это в книге: Java Concurrency in Practice
Теперь я начинаю думать, что я что-то здесь неправильно понимаю, так как в первой части книги рекомендуется использовать Executors
это повторное использование Thread
вместо создания новых экземпляров.
Итак, стал ли пул объектов устаревшим в наши дни?
источник
Ответ на конкретный вопрос: «Является ли объединение объектов устаревшей техникой?» является:
Нет. Пул объектов широко используется в определенных местах - пул потоков, пул соединений с базой данных и т. Д.
Создание общего объекта никогда не было медленным процессом. Сам по себе пул потребляет ресурсы - память и вычислительную мощность. Любая оптимизация - это компромисс.
Правило таково:
Преждевременная оптимизация - это зло !!!
Но когда данная оптимизация преждевременна?
Преждевременная оптимизация - это любая оптимизация, выполненная до того, как вы обнаружите узкое место с помощью тщательного профилирования .
источник
В ситуациях, когда вы хотите полностью избежать сбора мусора, я думаю, что пул объектов является единственной жизнеспособной альтернативой. Так что нет, это абсолютно не устаревшая техника.
источник
Мера
Это полностью зависит от вашего варианта использования, размера ваших объектов, вашей JVM, ваших опций JVM, того, какой GC вы включили, и множества других факторов.
Вкратце: измеряйте до и измеряйте после. Предполагая, что вы используете инфраструктуру пула объектов (например, из Apache), тогда не должно быть слишком болезненным переключаться между реализациями.
Дополнительный совет по тестированию производительности - позвольте JVM сначала немного прогреться, несколько раз запускайте тесты на работающей JVM, она может вести себя по-разному.
источник
Зависит от контекста.
источник
Я не знаю, есть ли изменение тренда здесь , но его , безусловно , будет так , что это зависит . Если ваш Java-класс управляет внешним ресурсом, таким как RMI-соединение или загрузка файла ресурса и т. Д., То, конечно, затраты на создание экземпляра объекта все еще могут быть высокими (хотя эти ресурсы уже могут быть объединены для вас!). Как общая практика, я бы согласился с книгой.
источник