Ada dua alasan dasar mengapa Java lebih cepat daripada Go dan C ++, dan bisa lebih cepat daripada C dalam banyak kasus:
1) Kompiler JIT. Itu dapat menyebariskan panggilan fungsi virtual melalui beberapa level, bahkan dengan kelas OO, berdasarkan profil runtime. Ini tidak mungkin dilakukan dalam bahasa yang dikompilasi secara statis (meskipun kompilasi ulang yang lebih baru berdasarkan profil yang direkam dapat membantu). Ini sangat penting untuk sebagian besar tolok ukur yang melibatkan algoritme berulang.
2) GC. Alokasi memori berbasis GC hampir gratis, dibandingkan dengan malloc. Dan hukuman 'gratis' dapat diamortisasi di seluruh waktu proses - sering kali dilewati karena program berakhir sebelum semua sampah perlu dikumpulkan.
Ada ratusan (ribuan?) Pengembang yang sangat berbakat yang membuat GC / JVM efisien. Berpikir bahwa Anda dapat "membuat kode lebih baik dari semuanya" adalah suatu kebodohan. Ini adalah masalah ego manusia pada intinya - manusia sulit menerima bahwa dengan pelatihan yang tepat oleh manusia berbakat, komputer akan bekerja lebih baik daripada manusia yang memprogramnya.
Btw, C ++ bisa secepat C jika Anda tidak menggunakan dan fitur OO, tetapi kemudian Anda cukup dekat dengan hanya pemrograman di C untuk memulai.
Yang terpenting, "perbedaan kecepatan" dalam tes ini biasanya tidak ada artinya. Biaya IO lebih banyak daripada perbedaan kinerja, dan desain yang tepat yang meminimalkan biaya IO selalu menang - bahkan dalam bahasa yang ditafsirkan. Sangat sedikit sistem yang terikat dengan CPU.
Sebagai catatan terakhir, orang menyebut "permainan benchmark bahasa komputer" sebagai "ukuran ilmiah". Tesnya benar-benar cacat, Misalnya, jika Anda melihat tes Java untuk nbody. Ketika saya menjalankan tes pada OS / perangkat keras yang sama, saya mendapatkan sekitar 7,6 detik untuk Java, dan 4,7 detik untuk C - yang masuk akal - bukan 4x kelambatan laporan pengujian. Ini adalah umpan-klik, berita palsu, yang dirancang untuk menghasilkan lalu lintas situs.
Sebagai catatan terakhir, catatan terakhir ... Saya menjalankan pengujian menggunakan Go, dan hasilnya 7,9 detik. Fakta bahwa ketika Anda mengklik Go, itu membandingkannya dengan Java, dan ketika Anda mengklik Java, itu membandingkannya dengan C, seharusnya menjadi tanda bahaya bagi teknisi yang serius.
Untuk perbandingan dunia nyata dari Java, Go, dan C ++, lihat https://www.biorxiv.org/content/10.1101/558056v1 peringatan spoiler, Java menjadi yang teratas dalam kinerja mentah, dengan Go menjadi yang teratas dengan penggunaan memori gabungan dan waktu dinding.