C ++ 11 (нативный код) против Java (байт-код)

В последнее время я думаю о разнице между нативным и байт-кодом.
Я провел некоторое исследование, и вся информация, которую я прочитал, касалась кода C ++, скомпилированного в нативный код, по сравнению с кодом Java, скомпилированным в байт-код (работает на JVM, использующей преимущества многоядерных процессоров). Был сделан вывод, что приложения, написанные на Java, работают быстрее.

C ++ 11 меняет это?
Приложения, написанные на C ++ 11 (поскольку добавляет потоки), работают быстрее, чем Java?

2

Решение

Был сделан вывод, что приложения, написанные на Java, работают быстрее.

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

C ++ всегда был в состоянии использовать потоки, просто у него не было столько подробностей о том, как их можно использовать. Я не верю, что C ++ 11 касается производительности, но стандартизирует такие вещи, как модели памяти.

ИМХО Учитывая любое количество времени и опытных разработчиков, программа на C ++ всегда будет быстрее, чем программа на Java. Однако, учитывая ограниченное количество времени и разработчиков смешанных способностей, вы, скорее всего, получите что-то работающее и работающее хорошо в Java. Ваш пробег будет меняться. 😉


Делая мой ответ яснее …

C ++ 11 меняет это?

Нет. Я не согласен, что это ситуация, и это не меняет ее.

Работают ли приложения, написанные на C ++ 11 (поскольку добавляет потоки) быстрее, чем Java

Да, но не всегда, как и в предыдущих версиях.

3

Другие решения

Ни C ++, ни Java автоматически не разделяют вашу программу на несколько потоков. Самое близкое к автоматическому распараллеливанию в современных языках — использование параллельных коллекций. В C ++ есть библиотеки для этого, но в более функциональных языках есть лучшая поддержка для такого рода вещей, например. Haskell, Scala, Clojure.
Другой способ получить автоматическое распараллеливание — использовать библиотеку акторов и написать всю программу с актерами. Erlang был первым языком с полной поддержкой для этого, но фреймворк Akka для Scala / Java также очень хорош.

2

Я бы просто сказал All Your Java Bases Are Belong To C++., Сама JVM написана на C / C ++. C / C ++ работает на собственной скорости на «голом железе» машины, в то время как байт-коды интерпретируются кодом C / C ++ (который работает поверх металла). Одна инструкция с байтовым кодом может переводить примерно в 5-10 асм-инструкций (или более). Следовательно, скорость выполнения C / C ++ считается быстрее, чем у Java. Конечно, если бы среда выполнения Java была выброшена на металл, и мы интерпретировали байт-код на скорости машины, то это было бы справедливым сравнением.

Тем не менее, см. Пример в книге «Программирование жемчужин», где автор запускает интерпретированную программу BASIC на персональном компьютере Radioshack, который с достаточной оптимизацией работает быстрее, чем на суперкомпьютере. Это означает, что скорость выполнения вашей программы зависит от ваших алгоритмов и практики кодирования / оптимизации.

1