Используйте атрибут rendered
. Он принимает логическое выражение. Вы можете оценить значение таблицы данных внутри выражения с помощью ключевого слова EL empty
. Если он возвращает false
, весь компонент (и его дочерние элементы) не будут отображаться.
...
Для интересующего вас случая, вот другие основные примеры того, как использовать полномочия EL внутри атрибута rendered
:
не пытайтесь перехитрить jvm.
в частности:
не пытайтесь избежать создания объекта для повышения производительности
используйте неизменяемые объекты, где применимо.
используйте объем ваших объектов правильно, чтобы сборщик мусора мог job.
используйте примитивы там, где вы имеете в виду примитивы (например, не допускающие значения NULL int по сравнению с обнуляемым Integer)
использовать встроенные алгоритмы и структуры данных
при обработке параллелизма используйте пакет java.util.concurrent.
корректность важнее производительности. сначала сделайте это правильно, затем измерьте, затем измерьте с помощью профилировщика, затем оптимизируйте.
Вот что я бы сделал на любом языке. Если образцы показывают, что ваша процедура сравнения сортировки активна большую часть времени, вы можете найти способ ее упростить. Но, возможно, время уходит в другое место. Сначала проведите диагностику, чтобы увидеть, что сломано, прежде чем что-либо исправлять. Скорее всего, если вы исправите самую большую вещь, то что-то еще будет самой большой проблемой и так далее, пока вы действительно не добьетесь довольно хорошего ускорения.
Возможно, есть другие пути повышения производительности, кроме микрооптимизации кода. Как насчет другого алгоритма для достижения того, чего вы хотели от вашей программы? Может быть, другая структура данных?
Или поменяйте место на диске / оперативной памяти на скорость, или, если вы можете заранее выделить некоторое время во время загрузки вашей программы, вы можете предварительно вычислить таблицы поиска вместо того, чтобы выполнять вычисления - таким образом, обработка быстрая. То есть сделайте некоторые компромиссы доступными другими ресурсами.
Если ваш алгоритм нагружает процессор, вы можете рассмотреть возможность использования распараллеливания. Вы можете сортировать по нескольким потокам и объединить результаты позже.
Однако это решение не стоит принимать легкомысленно, поскольку писать параллельный код сложно.
Выполняется ли ваш код сортировки только один раз, например, в служебной программе командной строки, которая просто сортирует, или несколько раз, например, в веб-приложении, которое выполняет сортировку в ответ на ввод данных пользователем?
Скорее всего, это производительность значительно увеличится после того, как код будет выполнен несколько раз, потому что виртуальная машина HotSpot может агрессивно оптимизироваться, если решит, что ваш код является горячей точкой.
Это большое преимущество по сравнению с C / C ++.
ВМ во время выполнения , оптимизирует часто используемый код, и делает это достаточно хорошо. Из-за этого производительность может даже превзойти C / C ++. В самом деле. ;)
Ваш собственный Comparator может быть местом для оптимизации.
Попробуйте сначала проверить недорогие вещи (например, сравнение int) перед более дорогими вещами (например, сравнение строк). Я не уверен, применимы ли эти советы, потому что я не Я не знаю свой компаратор.
Используйте Collections.sort (список, компаратор) или Arrays.sort (массив, компаратор). Вариант с массивом будет немного быстрее, см. Соответствующую документацию.
Как сказал Андреас ранее: не пытайтесь перехитрить виртуальную машину.
Методически вы должны профилировать приложение, а затем получить представление о том, какие компоненты вашей программы являются временными и интенсивно использующие память: затем присмотритесь к этим компонентам, чтобы улучшить их производительность (см. закон Амдала ).
С чисто технологической точки зрения вы можете использовать некоторый java-to-native код компиляторы, такие как Jet Excelsior, но я должен отметить, что недавняя JVM действительно быстрая, поэтому виртуальная машина не должна оказывать существенного влияния.
Разве вы не можете использовать функции сортировки, включенные в библиотеку Java?
Вы могли хотя бы посмотреть на разницу в скорости между двумя функциями сортировки.
jvisualvm теперь поставляется с JDK 6 - поэтому ссылка, указанная выше, не работает. Просто введите «jvisualvm
Если это длительный процесс, вы можете включить опцию -server при запуске. Вам доступно множество вариантов настройки; это только один.
Также попробуйте настроить аргументы времени выполнения виртуальной машины - например, последняя версия виртуальной машины включает следующий флаг, который может повысить производительность в определенных сценариях.
-XX:+DoEscapeAnalysis
Не оптимизируйте преждевременно.
Измерьте производительность, затем оптимизируйте.
По возможности используйте конечные переменные. Это не только позволит JVM чтобы оптимизировать больше, но и код легче читать и поддерживать.
Если вы делаете свои объекты неизменяемыми, вам не нужно их клонировать.
Оптимизируйте, изменив сначала алгоритм, а затем изменив реализацию.
Иногда вам нужно прибегнуть к помощи к старым методам, таким как развертывание цикла или кэширование предварительно вычисленных значений. Помните о них, даже если они не выглядят красиво, они могут быть полезны.
Используйте профилировщик:
Используйте последнюю версию JVM от вашего провайдера. Между прочим, обновление Sun Java 6 14 действительно приносит улучшения производительности .
Измерьте пропускную способность GC и выберите лучший сборщик мусора для вашей рабочей нагрузки .
Используйте последнюю версию JVM от вашего провайдера. Между прочим, обновление Sun Java 6 14 действительно приносит улучшения производительности .
Измерьте пропускную способность GC и выберите лучший сборщик мусора для вашей рабочей нагрузки .
Используйте последнюю версию JVM от вашего провайдера. Между прочим, обновление Sun Java 6 14 действительно приносит улучшения производительности .
Измерьте пропускную способность GC и выберите лучший сборщик мусора для вашей рабочей нагрузки .
Очевидно, профиль профиля профиль. Для Eclipse есть TPTP. Вот статья о подключаемом модуле TPTP для Eclipse . Netbeans имеет собственный профилировщик . jvisualvm хорош как самостоятельный инструмент. (Кажется, что весь сервер dev.java.net сейчас не работает, но это очень активный проект.)
Первое, что нужно сделать, это использовать процедуру сортировки библиотек, Collections.sort ; для этого потребуется, чтобы ваши объекты данных были Comparable . Это может быть достаточно быстро и определенно обеспечит хорошую основу.
Общие советы:
StringBuilder
(не StringBuffer
из-за этой блокировки, о которой я только что упомянул) вместо конкатенации String
объекты final
; если возможно, сделайте свои классы полностью неизменяемыми ArrayList
(или даже с массивом), чтобы память, к которой вы обращаетесь, была непрерывной, а не потенциально фрагментированной, как это могло бы быть с LinkedList