Кто-нибудь может количественно оценить различия в производительности между C ++ и Java? - PullRequest
16 голосов
/ 24 ноября 2008

До JIT Java была изначально медленной, но сегодня производительность довольно близка к C ++. Я хочу знать, проводил ли кто-нибудь измеримое сравнение производительности между двумя языками? Где Java не дотягивает по сравнению с C ++? Java обеспечивает разработчикам большую прибавку в производительности, поэтому они могут писать приложения гораздо быстрее из-за мусорного колледжа, отсутствия указателей и т. Д. Такие приложения, как Firefox, Webkit и Open Office Например, его можно было бы разработать намного быстрее и надежнее, если бы он был написан на 100% Java, возможно, в 2 раза, но разработчики по-прежнему выбирают C / C ++ по соображениям производительности. Может кто-нибудь продемонстрировать, где Java не может работать так же хорошо, как C ++ для приложений, подобных тем, которые я упомянул.

Позвольте мне просто добавить, что большая часть работы с приложениями все еще выполняется на C ++ по определенной причине. Это должно быть больше, чем субъективные вопросы. Языки с более высоким уровнем абстракции часто платят за производительность. Мы бы все программировали на языках более высокого уровня, если бы этого наказания не существовало. Где еще Java платит по сравнению с C ++? Будьте конкретны.

Ответы [ 13 ]

3 голосов
/ 02 июля 2010

Где Java не дотягивает по сравнению с C ++?

Отличный вопрос. У Java и JVM есть два основных недостатка, которые снижают производительность по сравнению с C ++:

  • Обобщения, основанные на стирании типа.

  • Отсутствие типов значений.

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

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

Обе эти проблемы в совокупности делают невозможным внедрение эффективной универсальной хэш-таблицы в Java. В частности, .NET решил обе эти проблемы. Например, общая хеш-таблица Java может быть в 17 раз медленнее, чем .NET Dictionary.

Кроме того, JVM имеют очень медленные FFI по сравнению с C ++. Я слышал, что простой вызов внешней функции C из Java может занять 1000 циклов.

1 голос
/ 25 октября 2009

Java-приложения имеют накладные расходы на инициализацию, чего нет у программ на C ++. Когда JITed, они не оптимизированы микро, как программы C ++. Кроме того, есть небольшие накладные расходы времени выполнения (GC + косвенные издержки вызова). В целом, эти поддающиеся количественному определению различия не составляют много. Но ...

Хорошо известно, что при первом запуске Java-приложения оно должно активировать конденсатор потока, чтобы вернуть среду в 1995 году. Это приводит к небольшой задержке при запуске. Но после этого JVM работает так же хорошо, как и программа на С ++, работающая на аппаратном обеспечении с 1995 года.

1 голос
/ 24 ноября 2008

Некоторые вещи лучше создаются с помощью Java, C # или любых управляемых языков программирования. Другие вещи будут всегда лучше создаваться с помощью неуправляемого языка программирования (например, C или C ++)

Первая категория обычно включает в себя «приложения» в целом, а вторая категория обычно включает «платформы» в целом.

Создать FireFox или WebKit на Java не только глупо, но и сделать конечный продукт действительно очень медленным, плохим и тратить много ресурсов для конечных пользователей. Open Office может быть хорошим кандидатом на Java, C # или SmallTalk в этом отношении. Но создавать FireFox или WebKit в Java (или C # в этом отношении) просто глупо и является гарантией отказа ...

C ++ и C будут на несколько порядков быстрее для многих вещей, в дополнение к этому он будет использовать часть памяти. Так оно и есть. И пока Java и C # являются «управляемыми» языками программирования, это никогда не изменится. Может быть, когда-нибудь процессоры будут такими быстрыми, что «это не имеет значения». Но я сомневаюсь в этом, так как люди склонны сгибать свои требования, поскольку больше процессоров дается ...

Если вы хотите создать браузер, прошу прощения за то, что вам нужно учить себя C или C ++;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...