Убрав все очевидные предостережения, связанные с эталонными тестами и сравнением эталонных тестов, есть ли какое-либо исследование (набор хорошо документированных и непредвзятых тестов), в котором сравнивается средняя скорость выполнения двух упомянутых языков? Спасибо
Java против C#: есть ли какие-либо исследования, сравнивающие скорость их выполнения?
Ответы (5)
Лучшее сравнение, которое я знаю, — это Игра по оценке компьютерных языков.
Он сравнивает скорость, использование памяти и размер исходного кода для (в настоящее время) 10 тестов на большом количестве языков программирования. Реализации эталонных тестов предоставляются пользователями, и они постоянно улучшаются, поэтому положение несколько меняется.
В настоящее время проводится сравнение openjdk и C# .NET Core.
В настоящее время это близко, но .NET Core немного быстрее на большинстве ориентиры.
Вот хорошее недавнее исследование по этому вопросу:
Численная производительность в C, C# и Java
Питер Сестофт ([email protected])
ИТ-университет Копенгагена, Дания
Версия 0.9.1 от 19 февраля 2010 г.
Аннотация: Мы сравниваем числовую производительность C, C# и Java в трех небольших случаях.
...
Оба языка развиваются с точки зрения производительности. По крайней мере, в 2013 году Джо Даффи из Microsoft записал в блог:
Java ближе [к C++ по производительности], чем C#, благодаря отличной работе в виртуальных машинах, подобных HotSpot, которые используют питчинг кода и распределение стека.
Это может привести к флейму, но эй, это мое мнение...
Прежде всего, если ваш сайт работает слишком медленно, вам понадобится более качественное оборудование. Или добавьте больше оборудования и добавьте балансировку нагрузки на свой сайт. Если вы Google, вы получите огромные серверные фермы с тысячами компьютеров, которые будут обеспечивать молниеносную производительность, даже если сами сайты разработаны на каком-то устаревшем языке.
Большинство языков были оптимизирован для получения максимальной отдачи от своего оборудования и превзойдет любой другой язык в этой конкретной среде с определенной настройкой. Сравнение языков не имеет особого смысла, потому что существуют тысячи способов их еще большей оптимизации. Кроме того, как вы измеряете производительность для начала?
Допустим, вы смотрите на скорость выполнения. Язык X может выполнять некоторые задачи в 2 раза быстрее, чем язык Y. Однако язык Y более оптимизирован для запуска нескольких потоков и может обслуживать в 10 раз больше пользователей, чем язык X, за то же время. Объедините это, и Y будет намного быстрее в среде клиент/сервер.
Но затем установите X на оптимизированную систему с операционной системой, которая очень нравится X, с дополнительным оборудованием, миллиардом байтов памяти и дискового пространства и дюжина процессоров или около того, и X снова превзойдут Y.
Итак, в чем ценность знания скорости выполнения языков? Или даже сравнение языков? Откуда мы знаем, что создатели отчета не были предвзяты? Как мы можем быть уверены, что они использовали самые оптимальные настройки для каждого языка? Написали ли они вообще самый оптимальный код для тестирования? И как вообще сравнивать конечные результаты? Время выполнения на пользователя? Или общее время выполнения?
Вернемся к языкам X и Y. X выполняет задачу за 2 секунды, но одновременно поддерживает только 10 потоков, то есть 10 пользователей. Y требуется 6 секунд, но он обслуживает до 50 потоков одновременно. X будет быстрее для каждого пользователя. За две секунды X обработал 10 пользователей. За 6 секунд X обработал 30 пользователей. Но к тому времени Y обработал бы 50 пользователей. Таким образом, Y превзойдет X, если у вас много пользователей, а X превзойдет Y при небольшом количестве пользователей. (Или темы.) Было бы интересно увидеть отчеты, в которых упоминается это, верно?
2021
Обзор
В течение многих лет приложения, созданные либо на Java, либо на .NET/C#, имели одинаковый уровень производительности. Однако корпорация Майкрософт и многие сторонние участники вложили значительные средства в оптимизацию этого аспекта и продолжают совершенствоваться. Например, веб-инфраструктура ASP.NET Core позволяет обслуживать 7 миллионов запросов в секунду на одном сервере. А согласно тестам TechEmpower, ASP.NET Core намного опережает любую веб-инфраструктуру Java.
Исследования
https://github.com/ixy-languages/ixy-languages
Вот еще одна хорошая демонстрация производительности, которую можно достичь на платформе .NET — пример сверхбыстрого сетевого драйвера, написанного на разных языках. Драйвер, написанный на C#, показывает почти такой же уровень производительности, как C и Rust, чуть лучше, чем язык Go, и намного опережает все другие высокоуровневые языки, включая Java.