Java'nın Go ve C ++ 'dan daha hızlı olmasının ve birçok durumda C'den daha hızlı olmasının iki temel nedeni vardır:
1) JIT derleyicisi. Sanal işlev çağrılarını, çalışma zamanı profiline bağlı olarak OO sınıflarında bile birden çok düzeyde satır içi yapabilir. Bu, statik olarak derlenen bir dilde mümkün değildir (kaydedilen profile dayalı yeni yeniden derleme yardımcı olabilirse de). Bu, tekrarlayan algoritmalar içeren çoğu kıyaslama için çok önemlidir.
2) GC. GC tabanlı bellek tahsisi, malloc ile karşılaştırıldığında neredeyse ücretsizdir. Ve 'ücretsiz' ceza, tüm çalışma süresi boyunca amortismana tabi tutulabilir - genellikle atlanır çünkü program, tüm çöplerin toplanması gerekmeden önce sona erer.
GC / JVM'yi verimli kılan yüzlerce (binlerce?) Son derece yetenekli geliştirici vardır. "Hepsinden daha iyi kod yazabileceğinizi" düşünmek aptallıktır. Bu, özünde bir insan egosu problemidir - insanlar, yetenekli insanlar tarafından uygun bir eğitimle bilgisayarın onu programlayan insanlardan daha iyi performans göstereceğini kabul etmekte zorlanırlar.
Btw, C ++, OO özelliklerini kullanmazsanız C kadar hızlı olabilir, ancak başlamak için C ile programlamaya oldukça yakınsınızdır.
En önemlisi, bu testlerdeki "hız farklılıkları" genellikle anlamsızdır. IO maliyetleri, performans farklılıklarından daha büyük siparişlerdir ve bu nedenle IO maliyetlerini en aza indiren uygun tasarımlar her zaman kazanır - yorumlanmış bir dilde bile. Çok az sistem CPU'ya bağlıdır.
Son bir not olarak, insanlar "bilgisayar dili kıyaslama oyunundan" "bilimsel bir önlem" olarak bahsediyorlar. Testler tamamen kusurludur, Örneğin, nbody için Java testlerini görüntülerseniz. Testleri aynı işletim sistemi / donanım üzerinde çalıştırdığımda, Java için yaklaşık 7,6 saniye ve C için 4,7 saniye alıyorum - ki bu mantıklı - testlerin rapor ettiği 4 kat yavaşlık değil. Site trafiğini oluşturmak için tasarlanmış tıklama tuzağı, sahte haberlerdir.
Son, son bir not olarak ... Testleri Go kullanarak çalıştırdım ve 7,9 saniyeydi. Git'e tıkladığınızda, onu Java ile karşılaştırması ve Java'ya tıkladığınızda C ile karşılaştırması, herhangi bir ciddi mühendis için kırmızı bayrak olmalıdır.
Java, Go ve C ++ arasında gerçek bir dünya karşılaştırması için bkz. Https://www.biorxiv.org/content/10.1101/558056v1 spoiler uyarısı, Java ham performansta zirveye çıkıyor ve Go, kombine bellek kullanımıyla zirveye çıkıyor ve duvar saati.