In termini di progettazione della lingua, non c'è nulla che dovrebbe rendere Go più lento di Java in generale. In effetti, ti dà più controllo sul layout della memoria delle tue strutture dati, quindi per molte attività comuni dovrebbe essere un po 'più veloce. Tuttavia, l'attuale compilatore primario Go, il programma di pianificazione, il garbage collector, la libreria regexp e molte altre cose non sono particolarmente ottimizzati. Questo sta migliorando costantemente, ma l'attenzione sembra essere quella di essere utile, semplice e abbastanza veloce rispetto alla vincita nei microbenchmarks.
Nel benchmark collegato, Go perde grande a Java nell'albero binario e nel test regexp. Quelli sono test rispettivamente del sistema di gestione della memoria e della libreria regexp. La gestione della memoria di Go potrebbe essere più veloce e sicuramente migliorerà nel tempo e l'attuale libreria standard regexp è un segnaposto per un'implementazione molto migliore che verrà presto. Quindi, perdere su quei due non è sorprendente, e nel prossimo futuro il margine dovrebbe essere più stretto.
Per il benchmark k-nucleotide, è piuttosto difficile confrontare perché il codice Java sembra utilizzare un algoritmo diverso. Il codice Go trarrà sicuramente beneficio dai miglioramenti del compilatore, dello schedulatore e dell'amplificatore, anche se scritti, ma qualcuno dovrebbe riscrivere il codice Go per fare qualcosa di più intelligente se volessimo confrontare più accuratamente.
Java vince nel benchmark di mandelbrot perché è tutto aritmetico e loop in virgola mobile, e questo è un ottimo posto per la JVM per generare codice macchina veramente buono e sollevare cose in fase di runtime. Vai, in confronto, ha un compilatore piuttosto semplice che non solleva, srotola o genera codice macchina veramente stretto al momento, quindi non sorprende che perda. Tuttavia, si dovrebbe tenere presente che i tempi di Java non contano il tempo di avvio della JVM o le molte volte che deve essere eseguito affinché la JVM possa farlo correttamente. Per i programmi a esecuzione prolungata, questo non è rilevante, ma in alcuni casi è importante.
Come per il resto dei benchmark, Java e Go sono fondamentalmente collo-in-collo, con Go che prende molto meno memoria e nella maggior parte dei casi meno codice.
Quindi, mentre Go è più lento di Java in una serie di test, Java è piuttosto veloce, Go fa piuttosto bene in confronto, e Go sarà probabilmente notevolmente più veloce nel prossimo futuro.
Non vedo l'ora che gccgo (un compilatore di Go che usa il codegen di gcc) sia maturo; questo dovrebbe rendere Go più o meno in linea con C per molti tipi di codice, che saranno interessanti.