Como o desempenho .NET / Mono comparar a JVM?
-
05-07-2019 - |
Pergunta
Eu estive pensando isso por um tempo. Por favor fornecer dados quantitativos para apoiar sua resposta.
Relacionado: Existe uma diferença significativa entre Windows, Mac e Linux JVM desempenho
?Solução
Shudo tem comparações done e libera código fonte para microbenchmarks como Linpack, Scimark, etc .
Os resultados das amostras para o Linpack:
(fonte: shudo.net )
Mas a última atualização durou mais de 5 anos atrás - aparentemente usando NET V1.0 ou v1.1, e principalmente usando JVM v1.4. Que significa que é vários lançamentos fora da data em Java e .NET. Você pode obter o código fonte e gerar seus próprios resultados.
Eu apenas fiz isso - linpack.java baixado e linpack.cs, compilado e correu-los. Eu costumava v1.6.0.11 Java da Sun, e C # 3.0 (3,5 compilador) da Microsoft. Tanto no Windows Vista.
Para um tamanho de problema Linpack de 2000, recebi 17.6s para a versão Java, 17.78s para a versão C #.
Então eu corri-lo novamente e tem 18.14s para Java, e 17,31 para C #.
O que você está medindo?
Isto ilustra alguns desafios na medição de desempenho e testes.
-
Primeiro:
um único julgamento não é suficiente para tirar conclusões significativas. Normalmente, você deve medir muitos ensaios, e, em seguida, a média dos resultados. -
Segundo:
apenas o que você está medindo? Se você executar uma única tentativa de resolver um único problema, então o custo de iniciar o processo está incluído no tempo, assim como o tempo JIT, e qualquer custo para preencher quaisquer buffers. Isto pode ou não ser o que você realmente deseja medir.Em muitos casos, é a steady-state perf você quer medir. Por exemplo, em um processo de servidor, você iniciá-lo uma vez e ele é executado por meses. Portanto, o custo inicial é desprezível, eo que você quer para medir e otimizar para é pedido rendimento dado um tempo médio de resposta mínimo. Ou em uma "Fat Cliente", o que você quer é o tempo necessário para fazer o processamento de vídeo, e você não quer medir custos de arranque do processo.
-
Em terceiro lugar:
qual é a carga de trabalho? Linpack e Scimark pode ser interessante se você fizer um monte de matemática de ponto flutuante. Mas e se você não faz? E se você faz muita destruição XML, ou análise de cadeia, ou matemática inteiro, ou a interação de banco de dados, ou geração de páginas HTML. E se o seu código faz lotes de gerenciamento de threads, ou usos primitivos thread-sincronização? E sobre as comunicações e IO? E se uma parte essencial de uma transação é a criptografia, ou de criação de assinatura digital e verificação? Esses benchmarks não vai dizer nada sobre os outros cenários. Por essa razão, você pode chamá-los de micro-benchmarks.Você precisa de uma referência que corretamente modelos que você deseja avaliar.
Veja também:
Trivial problemas matemáticos como a linguagem benchmarks
Outras dicas
Confira A Linguagem Informática Shootout . Eles comparam várias línguas, e VMs, incluindo Mono e JVM .
Se você está olhando para o arranque velocidade, memória e utilização da CPU em desktops, este poderia ajudar, uma vez que está usando os últimos lançamentos em julho de 2010