Java più veloce di C++?
Utilizzando codice benchmark di qualche anno fa in parte modificato, Keith Lea ritiene di aver dimostrato che Java in diversi casi è più veloce di C++.
Il confronto è stato fatto su un portatile Pentium IV con 512 MB di RAM utilizzando G++ (GCC) 3.3.1 20030930 (con glibc 2.3.2-98) per compilare C++, ottimizzato con il flag -O2 ed il compilatore Java 1.4.2_01 sulla JVM 1.4.2_01 JVM, su un sistema Red Hat Linux 9/Fedora Test1 kernel 2.4.20-20.9.
Le annotazioni sulla scelta del codice per la preparazione dei test dovrebbero tranquillizzare i lettori circa l'imparzialità delle prove e la bontà delle scelte; per quanto riguarda l'uso di GCC invece di VC++ c'è la promessa di aggiungere proprio questo compilatore in futuro. Effettivamente questa scelta potrebbe aver pesato, come si vede in questo test diciamo minimale.
Altri punti controversi potrebbero essere le ottimizzazioni ed il mancato uso di alcuni dei sorgenti di prova che comunque è possibile scaricare per effettuare le prove per proprio conto.
Una nota interessante riguarda l'uso della Server JVM, che si dovrebbe lanciare usando lo switch -server dalla riga di comando (ad esempio java -server -jar beanshell.jar) o modificando il file jvm.cfg, basta invertire le linee -client KNOWN e -server KNOWN; in questo modo si aumenterebbe il tempo di avvio della JVM ed il consumo di memoria, guadagnando però in velocità di esecuzione.
A quanto pare questo accorgimento sembra permetta un guadagno considerevole, in particolare sulla chiamata di metodi e hash, come si vede dal grafico riassuntivo.
I primi commenti sono tendenzialmente scettici; oltre alle distinzioni tra i linguaggi, interpreti, compilatori e altre sottigliezze, alcuni puntualizzano il fatto che non è tanto la velocità del codice a interessare programmatori e utenti, quanto l'uso di risorse, in particolare con la grafica o con algoritmi più complessi, che in Java spesso crea problemi di memoria e CPU.
Per quanto riguarda la concatenazione di stringhe, dove C++ sembra avere la meglio, la nuova classe di Java 1.5, java.lang.StringBuilder, dovrebbe essere più veloce di java.lang.StringBuffer. Anche i cambiamenti nel linguaggio quindi possono complicare l'attualità dei risultati.
La questione, che non sembra comunque avere una grande rilevanza pratica, ha diviso la platea tra chi ha voluto provare di persona e chi è stufo di queste chiacchiere. L'argomento risolutore sembra essere un bel Giga di RAM che copre parecchie se non tutte le magagne.
Articolo tratto da Programmazione.it
- [22/05/07] 2 falle in JDK
- [15/09/04] SmartWin++, un altro wrapper per programmare in Windows
- [01/04/04] Python è pronto per .NET
- [29/03/04] Creare applicazioni Java e .NET con un'unica API
- [17/03/04] La potenza di Java 1.5..subito!