Как производительность .NET / Mono сравнивается с JVM?
-
05-07-2019 - |
Вопрос
Я уже некоторое время задавался этим вопросом.Пожалуйста, приведите количественные данные в подтверждение вашего ответа.
Похожие:Есть ли существенная разница между производительностью JVM для Windows, Mac и Linux?
Решение
Сюдо провел сравнения и выпускает исходный код для микробенчмарков, таких как linpack, Scimark и т.д.
Примеры результатов для linpack:
(источник: shudo.net)
Но последнее обновление было более 5 лет назад - по-видимому, с использованием .NET версии V1.0 или v1.1, и в основном с использованием JVM версии v1.4.Это означает, что несколько версий устарели как на Java, так и на .NET.Вы могли бы получить исходный код и сгенерировать свои собственные результаты.
Я просто сделал это - скачал linpack.java и linpack.cs, скомпилировал и запустил их.Я использовал Java версии v1.6.0.11 от Sun и C # 3.0 (компилятор 3.5) от Microsoft.Оба в Windows Vista.
Для задачи linpack размером 2000 я получил 17,6 с для версии Java, 17,78 с для версии C #.
Затем я запустил его снова и получил 18,14 секунды для Java и 17,31 секунды для C #.
Что вы измеряете?
Это иллюстрирует некоторые проблемы, связанные с измерением производительности и тестированием.
Первый:
одного исследования недостаточно, чтобы сделать значимые выводы.Обычно вам следует измерить множество испытаний, а затем усреднить результаты.Второй:
что именно вы измеряете?Если вы запускаете единственную пробную версию решения одной проблемы, то стоимость запуска процесса включена во время, а также время JIT и любые затраты на заполнение любых буферов.Это может быть, а может и не быть тем, что вы действительно хотите измерить.Во многих случаях вы хотите измерить именно установившуюся производительность.Например, в серверном процессе вы запускаете его один раз, и он выполняется месяцами.Следовательно, стоимость запуска незначительна, и то, что вы хотите измерить и оптимизировать, - это пропускную способность запросов при минимальном среднем времени отклика.Или в "Толстом клиенте" вам нужно время, необходимое для обработки видео, и вы не хотите измерять затраты на запуск процесса.
Третий:
какова рабочая нагрузка?Linpack и Scimark могут быть интересны, если вы много занимаетесь математикой с плавающей запятой.Но что, если ты этого не сделаешь?Что делать, если вы много занимаетесь измельчением XML, или синтаксическим анализом строк, или математикой целых чисел, или взаимодействием с базой данных, или генерацией HTML-страниц?Что делать, если в вашем коде много управления потоками или используются примитивы синхронизации потоков?А как насчет связи и ввода-вывода?Что, если ключевой частью транзакции является шифрование или создание и проверка цифровой подписи?Эти тесты ничего не скажут вам об этих других сценариях.По этой причине вы могли бы назвать их микро-бенчмарками.Вам нужен эталон, который правильно моделирует то, что вы хотите оценить.
Смотрите также:
Тривиальные математические задачи как языковые ориентиры
Другие советы
Ознакомьтесь с Перестрелкой на языке программирования . Они сравнивают многочисленные языки и виртуальные машины, в том числе Mono и JVM .
если вы смотрите на скорость запуска, использование памяти и процессора на настольных компьютерах, это может помочь, так как использует последние выпуски по состоянию на июль 2010 года