Ci sono due ragioni fondamentali per cui Java è più veloce di Go e C ++ e può essere più veloce di C in molti casi:
1) Il compilatore JIT. Può inline chiamate di funzioni virtuali attraverso più livelli, anche con classi OO, basate sul profilo di runtime. Ciò non è possibile in un linguaggio compilato staticamente (sebbene la più recente ricompilazione basata sul profilo registrato possa aiutare). Questo è molto importante per la maggior parte dei benchmark che coinvolgono algoritmi ripetitivi.
2) Il GC. L'allocazione della memoria basata su GC è quasi gratuita, rispetto a malloc. E la penalità "gratuita" può essere ammortizzata durante l'intero runtime, spesso saltata perché il programma termina prima che sia necessario raccogliere tutta la spazzatura.
Ci sono centinaia (migliaia?) Di sviluppatori di grande talento che rendono efficiente il GC / JVM. Pensare di poter "programmare meglio di tutti loro" è una follia. È un problema dell'ego umano nel suo cuore: gli umani hanno difficoltà ad accettare che con un addestramento adeguato da parte di esseri umani di talento, il computer funzionerà meglio degli umani che lo hanno programmato.
A proposito, il C ++ può essere veloce come il C se non usi e delle funzionalità OO, ma allora sei abbastanza vicino alla semplice programmazione in C per cominciare.
Soprattutto, le "differenze di velocità" in questi test sono generalmente prive di significato. I costi di I / O sono ordini di grandezza superiori alle differenze di prestazioni, quindi i progetti appropriati che riducono al minimo i costi di I / O hanno sempre la meglio, anche in un linguaggio interpretato. Pochissimi sistemi sono vincolati alla CPU.
Come nota finale, le persone si riferiscono al "gioco dei benchmark del linguaggio del computer" come una "misura scientifica". I test sono completamente difettosi, ad esempio, se visualizzi i test Java per nessuno. Quando eseguo i test sullo stesso sistema operativo / hardware, ottengo circa 7,6 secondi per Java e 4,7 secondi per C - il che è ragionevole - non la lentezza 4x segnalata dai test. È un click-bait, fake news, progettato per generare traffico sul sito.
Come nota finale, finale ... Ho eseguito i test utilizzando Go, ed è stato di 7,9 secondi. Il fatto che quando fai clic su Vai, lo paragoni a Java e quando fai clic su Java lo confronta con C, dovrebbe essere una bandiera rossa per qualsiasi ingegnere serio.
Per un confronto nel mondo reale di Java, Go e C ++, vedere https://www.biorxiv.org/content/10.1101/558056v1 avviso di spoiler, Java è il migliore in termini di prestazioni grezze, con Go che è in cima con l'uso combinato della memoria e tempo di parete.