Как производительность .NET / Mono сравнивается с JVM?

StackOverflow https://stackoverflow.com/questions/1610022

  •  05-07-2019
  •  | 
  •  

Вопрос

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

Похожие:Есть ли существенная разница между производительностью JVM для Windows, Mac и Linux?

Это было полезно?

Решение

Сюдо провел сравнения и выпускает исходный код для микробенчмарков, таких как linpack, Scimark и т.д.

Примеры результатов для linpack:

alt text
(источник: 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 года

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top