Как написать эффективный Java-код?
Как вы все знаете, код Java компилируется и интерпретируется JVM.
Мои вопросы касаются оптимизации:
Оптимизирован ли он во время выполнения только JVM или во время компиляции?
Чтобы написать эффективный код, где я могу найти список поддерживаемых оптимизаций?
Или оптимизация JVM достаточно мощная, поэтому мне просто нужно написать код, который можно читать и легко поддерживать независимо от скорости работы?
Ответы
Ответ 1
Большая оптимизация выполняется JVM. Там обычно больше возможностей для оптимизации на уровне JIT, чем во время компиляции. (Флаг "optimize" был фактически выведен из javac
, потому что оказалось, что некоторые "оптимизации" на самом деле вредят производительности в реальном мире.)
В общем (и это относится ко многим языкам/платформам, а не только к Java):
- Введите код, который является максимально читабельным и поддерживаемым.
- У вас есть цели производительности и контрольные показатели, чтобы вы всегда могли измерять производительность.
- Положите усилия на создание вашей архитектуры; это трудно изменить позже (по сравнению с меняющейся реализацией).
- Подумайте о производительности больше с точки зрения сложности алгоритмов, чем "сделайте это на 10% быстрее": изменение от O (n ^ 2) до O (n) является (как правило) гораздо более важным. (Это очень зависит от того, каким будет использование реального мира, хотя, если вы будете иметь дело с небольшими значениями
n
, "теоретически лучший" алгоритм может легко оказаться медленнее из-за постоянных факторов.)
- Используйте профилировщик, чтобы определить, где ваши узкие места
- Только микро-оптимизация за счет удобства чтения, когда профилировщик предлагает сделать это
- Измерение после такой оптимизации - вы, возможно, не оказали большого влияния, и в этом случае откат
Ответ 2
Компилятор JIT Java HotSpot JIT может обнаруживать "горячие точки" и адаптивно изменять исполняемый код, чтобы он обеспечивал лучшую производительность. Читайте об этом здесь.
С другой стороны, если вы хотите написать код, эффективный для начала, прочитайте книгу, например " Hardcore Java". Роберт Симмонс или " Java Concurrency на практике" Брайана Гетца.
Ответ 3
Я бы определенно выбрал код для чтения и удобочитаемости по предполагаемым оптимизациям.
Преждевременная оптимизация обычно рассматривается как плохая вещь.
http://en.wikipedia.org/wiki/Optimization_(computer_science)#When_to_optimize
Конечно, измерение и доказательство узких мест с помощью профилирующих инструментов - это совсем другое дело.
Если вы это сделаете и можете доказать, что есть области, которые нуждаются в оптимизации, и вы можете затем оценить преимущества и оптимизировать.
Ответ 4
Оптимизирован ли он во время выполнения JVM только или во время компиляции?
Компиляторы Java обычно делают очень небольшую оптимизацию (помимо решения сложных литералов), так как "оптимизированный" байт-код может затруднить возможность компилятора JIT для оптимизации - и что там, где это действительно имеет значение.
Или могут быть оптимизированы JVM достаточно, чтобы мне просто пришлось писать код, который можно читать и легко поддерживать независимо от скорости выступления?
Это не вопрос доверия в JVM, чтобы оптимизировать вас лучше, чем вы (хотя это определенно фактор), вопрос оптимизации практически не имеет значения 95% времени, так как код не выполняется часто. Если на долю кода приходится 0,1% времени выполнения вашего приложения, это просто не стоит беспокоиться. Даже если вы можете ускорить его 100 раз, он ничего не получает. И это самый распространенный случай.
Пока вы избегаете вопиющих глупых вещей, вы должны забыть об оптимизации до тех пор, пока у вас не возникнет конкретная проблема с производительностью, а затем только оптимизируйте точно фрагменты кода, которые профайлер говорит вам, что это горячие точки в вашем коде.
Ответ 5
Несмотря на то, что эти советы предназначены для конкретной Java-реализации Google Android, я полагаю, что эти советы по производительности Google Android применяются в "нормальной" JVM как Что ж. Обратите внимание, что Android Java не оптимизирует код во время выполнения, насколько мне известно.
Ответ 6
Не беспокойтесь о конкретной оптимизации JVM. Эти данные меняются от версии к версии.
Купите книгу "Эффективная Ява" от Джоша Блоха - это лучшая книга по этой теме.
Ответ 7
Оптимизация JVM изменяется от версии к версии.