Повышение производительности при компиляции java в собственный код?

Есть ли какая-либо производительность, которая должна быть получена в наши дни от компиляции java к собственному коду, или же современные компиляторы hotspot в конечном итоге делают это в течение долгого времени?

Ответ 2

Еще несколько анекдотических доказательств. Я работал над несколькими критически важными финансовыми приложениями в режиме реального времени. Я согласен с Фрэнком, почти каждый раз, когда ваша проблема заключается не в отсутствии компиляции, это ваш алгоритм или структура данных. Современные компиляторы горячего пятна очень хороши с правильным кодом, например библиотека CERN Colt находится в пределах 90% от скомпилированного оптимизированного Fortran для числовых работа.

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

Мы использовали только встроенный скомпилированный код для скорости в одном экземпляре за последние несколько лет, и это было так, что мы могли бы использовать CUDA и получить некоторые серьезные характеристики графического процессора.

Ответ 3

Ваш вопрос немного большой, ответ сильно различается.

  • Если вы используете компиляцию Just In Time (JIT) или нет
  • Когда вы используете, если ваш процесс выполняется в течение длительного времени или нет

Все последние JVM используют JIT, но на старой JVM java-код на несколько раз замедляет этот собственный код.

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

Мы написали одну и ту же партию как на С++, так и на Java и запускаем ее с различным набором данных, результат отличается примерно на 3 секунды, причем набор данных занимает от 5 минут до нескольких часов.

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

Ответ 4

Производительность памяти или производительность процессора? Или они те же самые дни?

Мое единственное доказательство является анекдотическим и на другой платформе: после переноса кучи головок, потребляющих процессор, на С# (.NET 2.0), я не заметил существенных потерь в производительности (я не считаю 10% существенным). Хорошо написанный код, кажется, хорошо работает на различных архитектурах.

Большинство приложений тратят время на трафик:

  • Операции ввода-вывода, которые не будут использовать статический (компиляционный) анализ.
  • Плохие алгоритмы, которые не будут полезны для статического анализа.
  • Плохие расположения памяти в критических внутренних центрах процессора. Хотя технически возможно, что компиляторы помогают нам здесь, мне еще предстоит увидеть, что настоящий компилятор делает что-нибудь интересное.

Поэтому, основываясь на моем опыте, если вы не пишете видеокодек, нет никакой пользы для компиляции Java-приложений, а просто полагаться на компиляторы hotspot.

Ответ 5

Пробовал Hello-World с помощью шести различных реализаций, чтобы проверить накладные расходы и разница была ошеломляющей. Java была вне графика, а скомпилированные языки одинаково хорошо работали. Я мог бы доказать все доказательства (в воспроизводимых), если это необходимо.