В Java, как улучшить производительность создания объектов? - PullRequest
0 голосов
/ 16 марта 2012

Создание объектов является узким местом в моем приложении.

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

Тогда как улучшить производительность?

Ответы [ 4 ]

2 голосов
/ 16 марта 2012

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

Во-первых, вы должны использовать инструменты профилирования, чтобы убедиться, что чрезмерное создание объектов является источником ваших проблем с производительностью. Предполагая, что вы убедились, что это проблема, есть несколько вещей, которые нужно искать, и стратегии, которые стоит попробовать. Все зависит от того, как написан ваш код, поэтому ни одна рекомендация не сработает. Этот список рекомендаций по производительности Java от IBM определенно стоит применить. Он определяет, как избежать многих наиболее распространенных грехов: не создавайте объекты внутри циклов; использовать StringBuilder вместо последовательности выражений конкатенации строк; используйте примитивные типы и по возможности избегайте автоматической упаковки / распаковки; кешировать часто используемые объекты; выделять классы коллекций с явной емкостью вместо того, чтобы позволять им расти; и т.д.

Другим приятным ресурсом является глава 4 книги «Настройка производительности Java». (Вы можете прочитать его онлайн здесь .)

Если вы ищете в Интернете чрезмерное создание объекта java , вы можете найти множество других рекомендаций.

1 голос
/ 16 марта 2012

Java использует TLAB (Thread Local Allocation Buffer) для объектов малого и среднего размера. Это означает, что каждый поток может распределять объекты одновременно. то есть вы не получаете замедления для использования нескольких потоков.

В целом, большее количество процессоров улучшает проблемы с процессором. Это связанные с IO задачи, в которых один процессор может использовать всю доступную пропускную способность, например, доступ к диску, который не работает быстрее при использовании нескольких процессоров.

Самый простой способ снизить стоимость создания объекта - создать / удалить меньше объектов. Существует распространенное предположение, что создание объектов неизбежно, но последние 2,5 года я работал над приложениями, которые собирают GC менее одного раза в день, даже под рабочей нагрузкой.

Большинство приложений не работают таким образом, потому что им это не нужно. Однако, если вам нужно минимизировать создание объекта, вы можете.

1 голос
/ 16 марта 2012

Как говорит @Pst - вы уверены, что это узкое место? потому что в наши дни это не распространено.

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

1 голос
/ 16 марта 2012

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

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