Подсказки по производительности Java

Используйте атрибут rendered. Он принимает логическое выражение. Вы можете оценить значение таблицы данных внутри выражения с помощью ключевого слова EL empty. Если он возвращает false, весь компонент (и его дочерние элементы) не будут отображаться.




    ...

Для интересующего вас случая, вот другие основные примеры того, как использовать полномочия EL внутри атрибута rendered:








См. Также:

19
задан Alex Reynolds 2 June 2009 в 09:35
поделиться

12 ответов

не пытайтесь перехитрить jvm.

в частности:

  • не пытайтесь избежать создания объекта для повышения производительности

  • используйте неизменяемые объекты, где применимо.

  • используйте объем ваших объектов правильно, чтобы сборщик мусора мог job.

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

  • использовать встроенные алгоритмы и структуры данных

  • при обработке параллелизма используйте пакет java.util.concurrent.

  • корректность важнее производительности. сначала сделайте это правильно, затем измерьте, затем измерьте с помощью профилировщика, затем оптимизируйте.

32
ответ дан 30 November 2019 в 02:13
поделиться

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

0
ответ дан 30 November 2019 в 02:13
поделиться

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

Или поменяйте место на диске / оперативной памяти на скорость, или, если вы можете заранее выделить некоторое время во время загрузки вашей программы, вы можете предварительно вычислить таблицы поиска вместо того, чтобы выполнять вычисления - таким образом, обработка быстрая. То есть сделайте некоторые компромиссы доступными другими ресурсами.

0
ответ дан 30 November 2019 в 02:13
поделиться

Если ваш алгоритм нагружает процессор, вы можете рассмотреть возможность использования распараллеливания. Вы можете сортировать по нескольким потокам и объединить результаты позже.

Однако это решение не стоит принимать легкомысленно, поскольку писать параллельный код сложно.

1
ответ дан 30 November 2019 в 02:13
поделиться

Выполняется ли ваш код сортировки только один раз, например, в служебной программе командной строки, которая просто сортирует, или несколько раз, например, в веб-приложении, которое выполняет сортировку в ответ на ввод данных пользователем?

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

Это большое преимущество по сравнению с C / C ++.

ВМ во время выполнения , оптимизирует часто используемый код, и делает это достаточно хорошо. Из-за этого производительность может даже превзойти C / C ++. В самом деле. ;)

Ваш собственный Comparator может быть местом для оптимизации.

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

Используйте Collections.sort (список, компаратор) или Arrays.sort (массив, компаратор). Вариант с массивом будет немного быстрее, см. Соответствующую документацию.

Как сказал Андреас ранее: не пытайтесь перехитрить виртуальную машину.

0
ответ дан 30 November 2019 в 02:13
поделиться

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

С чисто технологической точки зрения вы можете использовать некоторый java-to-native код компиляторы, такие как Jet Excelsior, но я должен отметить, что недавняя JVM действительно быстрая, поэтому виртуальная машина не должна оказывать существенного влияния.

0
ответ дан 30 November 2019 в 02:13
поделиться

Разве вы не можете использовать функции сортировки, включенные в библиотеку Java?

Вы могли хотя бы посмотреть на разницу в скорости между двумя функциями сортировки.

1
ответ дан 30 November 2019 в 02:13
поделиться

jvisualvm теперь поставляется с JDK 6 - поэтому ссылка, указанная выше, не работает. Просто введите «jvisualvm », где - это идентификатор процесса, который вы хотите отслеживать. Вы увидите, как используется куча, но не увидите, что ее заполняет.

Если это длительный процесс, вы можете включить опцию -server при запуске. Вам доступно множество вариантов настройки; это только один.

2
ответ дан 30 November 2019 в 02:13
поделиться

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

-XX:+DoEscapeAnalysis 
3
ответ дан 30 November 2019 в 02:13
поделиться

Не оптимизируйте преждевременно.

Измерьте производительность, затем оптимизируйте.

По возможности используйте конечные переменные. Это не только позволит JVM чтобы оптимизировать больше, но и код легче читать и поддерживать.

Если вы делаете свои объекты неизменяемыми, вам не нужно их клонировать.

Оптимизируйте, изменив сначала алгоритм, а затем изменив реализацию.

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

4
ответ дан 30 November 2019 в 02:13
поделиться

Используйте профилировщик:

Используйте последнюю версию JVM от вашего провайдера. Между прочим, обновление Sun Java 6 14 действительно приносит улучшения производительности .

Измерьте пропускную способность GC и выберите лучший сборщик мусора для вашей рабочей нагрузки .

Используйте последнюю версию JVM от вашего провайдера. Между прочим, обновление Sun Java 6 14 действительно приносит улучшения производительности .

Измерьте пропускную способность GC и выберите лучший сборщик мусора для вашей рабочей нагрузки .

Используйте последнюю версию JVM от вашего провайдера. Между прочим, обновление Sun Java 6 14 действительно приносит улучшения производительности .

Измерьте пропускную способность GC и выберите лучший сборщик мусора для вашей рабочей нагрузки .

5
ответ дан 30 November 2019 в 02:13
поделиться

Очевидно, профиль профиля профиль. Для Eclipse есть TPTP. Вот статья о подключаемом модуле TPTP для Eclipse . Netbeans имеет собственный профилировщик . jvisualvm хорош как самостоятельный инструмент. (Кажется, что весь сервер dev.java.net сейчас не работает, но это очень активный проект.)

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

Общие советы:

  • Избегайте блокировок, которые вы не используете. нет необходимости (ваша JVM, возможно, уже оптимизировала их)
  • Используйте StringBuilder (не StringBuffer из-за этой блокировки, о которой я только что упомянул) вместо конкатенации String объекты
  • Сделайте все, что сможете final ; если возможно, сделайте свои классы полностью неизменяемыми
  • . Если вы не меняете значение переменной в цикле, попробуйте поднять ее и посмотреть, имеет ли это значение (JVM, возможно, уже сделала это за вас)
  • Попробуйте работать с ArrayList (или даже с массивом), чтобы память, к которой вы обращаетесь, была непрерывной, а не потенциально фрагментированной, как это могло бы быть с LinkedList
  • Quicksort, можно распараллелить ; подумайте о том, чтобы сделать это (см. распараллеливание быстрой сортировки )
  • Максимально уменьшите видимость и время жизни ваших данных (но не искажайте свой алгоритм, чтобы сделать это, если профилирование не показывает, что это большая победа)
11
ответ дан 30 November 2019 в 02:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: