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

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

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
11
0
9 016
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

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

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

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

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

Итак, исходя из моего опыта, если вы не пишете видеокодек, нет никаких преимуществ в компиляции приложений Java по сравнению с использованием компиляторов точек доступа.

Ответ принят как подходящий

Недавно здесь было подобное обсуждение вопроса В чем преимущества байт-кода перед машинным кодом?. Вы можете найти интересные ответы в этой ветке.

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

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

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

Ваш вопрос немного велик, ответы сильно различаются

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

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

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

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

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

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

Hello World не отражает реальную рабочую нагрузку, и я сомневаюсь, что она оптимизирована JVM. В таких очень маленьких случаях Java, скорее всего, проиграет по сравнению с компилируемыми языками.

nhahtdh 07.09.2013 00:05

Другие вопросы по теме