2014-02-04 1 views
0

Может быть, это хорошо известный вопрос, но я не нашел подходящей ссылки для этого Ques ...Список возможностей улучшения производительности, которые можно реализовать в Java

  1. , что формула для вычислить и присвоить значение u-limit по умолчанию, подробное (для gc) и максимальное значение памяти кучи?

  2. Если нет конкретной формулы, каковы критерии ее указания для конкретной машины.

Если возможно кто-то может пожалуйста объяснить эти понятия также.

  1. Есть ли какие-либо другие концепции, которые нам необходимо учитывать для повышения производительности?

  2. Как настроить JVM для лучшей производительности,

ответ

2

Стоп, что вы делаете прямо сейчас.

Тюнинг JVM, вероятно, Последнее вещь, о которой вы должны беспокоиться. До тех пор, пока вы не перейдете к любой другой трюк производительности в книге, настройки по умолчанию должны быть прекрасными.

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

  • Какие функции/методы потребляют большую часть времени процессора?
  • Где все распределения памяти происходит?
  • Какие объекты занимают больше всего места на куче?

Затем следует применять целенаправленную оптимизацию к областям, которые вызывают проблемы. Есть тысячи действующих методов, но вот те, которые я считаю наиболее полезными:

  • улучшить алгоритмы - все, что берет приличный кусок времени процессора и имеет сложность O(n^2) или хуже, вероятно, хороший кандидат на улучшение. Попытайтесь получить его до O(n log n) или лучше.
  • Поделитесь неизменяемыми данными - если у вас много копий одних и тех же данных, тогда имеет смысл превратить их в неизменяемые объекты и поделиться одним экземпляром. Это может сэкономить много памяти (и имеет хороший эффект улучшения ниточный/параллелизм)
  • Использование примитивных типов - заменить Integer с int и т.д. Это экономит память и делает числовые операции быстрее.
  • Будьте ленивы - не вычисляйте вещи, пока они определенно не нужны.
  • Cache things - если что-то дорого вычислить, но часто запрашивается, сохраните его в кеше после первого запроса. Используйте кеш, поддерживаемый SoftHashMap, так что при необходимости память может быть освобождена.
  • Разгрузочные работы - Можете ли вы использовать несколько ядер? Может ли клиентское приложение выполнить некоторые из ваших работ?

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

Повторяйте до тех пор, пока ваша заявка не будет достаточно быстро (как определено вашими требованиями или требованиями ваших клиентов).

+0

Красивый ответ, – Harry

+0

Mikera. Если возможно, вы можете указать формулу по умолчанию, чтобы выделить коллекцию ulimit и мусора. Я хочу настроить значения по умолчанию. – Harry

+0

Привет, Гарри, я не думаю, что есть «формула». Вам нужно будет поэкспериментировать, основываясь на рабочей нагрузке среды и приложения. Но в целом значения по умолчанию прекрасны. – mikera

Смежные вопросы