Как написать эффективный 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 изменяется от версии к версии.