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




Производительность памяти или производительность процессора? Или они такие же в наши дни?
Мое единственное свидетельство носит анекдотический характер и относится к другой платформе: после переноса группы требовательных к процессору приложений на C# (.NET 2.0) я не заметил существенной потери производительности (я не считаю 10% существенными). Хорошо написанный код, кажется, хорошо работает на множестве архитектур.
Большинство приложений тратят / тратят время на:
Итак, исходя из моего опыта, если вы не пишете видеокодек, нет никаких преимуществ в компиляции приложений Java по сравнению с использованием компиляторов точек доступа.
Недавно здесь было подобное обсуждение вопроса В чем преимущества байт-кода перед машинным кодом?. Вы можете найти интересные ответы в этой ветке.
Еще несколько анекдотических свидетельств. Я работал над несколькими критически важными для производительности финансовыми приложениями для торговли в реальном времени. Я согласен с Фрэнком, почти каждый раз, когда ваша проблема заключается не в отсутствии компиляции, а в вашем алгоритме или структуре данных. Современные компиляторы горячих точек очень хороши с правильным кодом, например, Библиотека CERN Colt находится в пределах 90% от скомпилированного, оптимизированного Fortran для числовой работы.
Если вас беспокоит скорость, я бы действительно порекомендовал хороший профилировщик и получил доказательства того, где у вас узкие места - я использую YourKit и мне очень нравится.
За последние несколько лет мы прибегали к встроенному скомпилированному коду для повышения скорости только в одном экземпляре, и это было сделано для того, чтобы мы могли использовать CUDA и получить серьезную производительность графического процессора.
Ваш вопрос немного велик, ответы сильно различаются
Все недавние JVM используют JIT, но на старой JVM Java-код в несколько раз медленнее, чем собственный код.
Если у вас есть сервер, который работает в течение длительного периода времени, или пакет, который выполняет один и тот же код снова и снова, разница будет очень низкой.
Мы написали один и тот же пакет как на C++, так и на Java и запустили его с другим набором данных, результат отличается примерно на 3 секунды, а набор данных занимает от 5 минут до нескольких часов.
Но будьте осторожны, это особый случай, когда будет важное различие, например, пакет, который требует много памяти.
Пробовал Hello-World с шестью различными реализациями, просто чтобы проверить накладные расходы и разница была ошеломляющей. Java отсутствовала в чартах, в то время как компилируемые языки работали так же хорошо. Я мог бы подтвердить все доказательства (в воспроизводимом виде), если бы это было необходимо.
Hello World не отражает реальную рабочую нагрузку, и я сомневаюсь, что она оптимизирована JVM. В таких очень маленьких случаях Java, скорее всего, проиграет по сравнению с компилируемыми языками.