Есть ли какая-либо производительность, которая должна быть получена в наши дни от компиляции java к собственному коду, или же современные компиляторы hotspot в конечном итоге делают это в течение долгого времени?
Повышение производительности при компиляции java в собственный код?
Ответ 1
Недавно была аналогичная дискуссия, на вопрос Каковы преимущества байт-кода над собственным кодом?. Вы можете найти интересные ответы в этой теме.
Ответ 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 была вне графика, а скомпилированные языки одинаково хорошо работали. Я мог бы доказать все доказательства (в воспроизводимых), если это необходимо.