Domanda

Me lo sto chiedendo da un po '. Fornisci dati quantitativi a supporto della tua risposta.

Correlati: esiste una differenza significativa tra le prestazioni JVM di Windows, Mac e Linux?

È stato utile?

Soluzione

Shudo ha fatto confronti e rilascia codice sorgente per microbenchmark come linpack, Scimark, ecc. .

Risultati di esempio per linpack:

 alt text
(fonte: shudo.net )

Ma l'ultimo aggiornamento è stato effettuato oltre 5 anni fa, apparentemente usando .NET V1.0 o v1.1 e usando principalmente JVM v1.4. Ciò significa che sono diverse le versioni non aggiornate su Java e .NET. Potresti ottenere la fonte e generare i tuoi risultati.


Ho appena fatto questo: scaricato linpack.java e linpack.cs, compilato ed eseguito. Ho usato Java v1.6.0.11 di Sun e C # 3.0 (compilatore 3.5) di Microsoft. Entrambi su Windows Vista.

Per una dimensione del problema di Linpack di 2000, ho ottenuto 17.6s per la versione Java, 17.78s per la versione C #.

Quindi l'ho eseguito di nuovo e ho ottenuto 18.14s per Java e 17.31 per C #.


Cosa stai misurando?

Questo illustra alcune sfide nella misurazione e nel test delle prestazioni.

  • In primo luogo:
    una sola prova non è sufficiente per trarre conclusioni significative. Di solito dovresti misurare molte prove e quindi fare una media dei risultati.

  • Secondo:
    cosa stai misurando? Se si esegue una singola prova per risolvere un singolo problema, i costi di avvio del processo sono inclusi nel tempo, nonché nel tempo JIT e qualsiasi costo per riempire eventuali buffer. Questo potrebbe essere o meno ciò che vuoi davvero misurare.

    In molti casi è la perf dello stato stazionario che si desidera misurare. Ad esempio in un processo server, lo si avvia una volta e viene eseguito per mesi. Pertanto, il costo di avvio è trascurabile e ciò che si desidera misurare e ottimizzare è il throughput della richiesta, dato un tempo di risposta medio minimo. O in un "Fat Client", quello che vuoi è il tempo necessario per eseguire l'elaborazione video e non vuoi misurare i costi di avvio del processo.

  • Terzo:
    qual è il carico di lavoro? Linpack e Scimark potrebbero essere interessanti se fai molta matematica in virgola mobile. E se non lo facessi? Che cosa succede se si esegue un sacco di triturazione XML, analisi delle stringhe, matematica di numeri interi, interazione con il database o generazione di pagine HTML. Che cosa succede se il codice esegue molta gestione dei thread o utilizza primitive di sincronizzazione dei thread? Che dire di comunicazioni e IO? Cosa succede se una parte chiave di una transazione è la crittografia o la creazione e la verifica della firma digitale? Questi benchmark non ti diranno nulla di quegli altri scenari. Per questo motivo potresti chiamarli micro-benchmark.

    È necessario un benchmark che modelli correttamente ciò che si desidera valutare.


Vedi anche:
Problemi matematici di base come benchmark linguistici

Altri suggerimenti

Dai un'occhiata a The Computer Language Shootout . Confrontano numerose lingue e macchine virtuali, tra cui Mono e JVM .

se stai osservando la velocità di avvio, la memoria e l'utilizzo della CPU sui desktop, questo potrebbe essere utile poiché utilizza le ultime versioni a partire da luglio 2010

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top