มีเหตุผลพื้นฐานสองประการที่ทำให้ Java เร็วกว่า Go และ C ++ และอาจเร็วกว่า C ในหลาย ๆ กรณี:
1) คอมไพเลอร์ JIT สามารถเรียกใช้ฟังก์ชันเสมือนแบบอินไลน์ผ่านหลายระดับแม้จะมีคลาส OO ก็ตามโดยอิงตามโปรไฟล์รันไทม์ สิ่งนี้ไม่สามารถทำได้ในภาษาที่คอมไพล์แบบสแตติก (แม้ว่าการคอมไพล์ใหม่ที่ใหม่กว่าตามโปรไฟล์ที่บันทึกไว้จะช่วยได้) สิ่งนี้สำคัญมากสำหรับการวัดประสิทธิภาพส่วนใหญ่ที่เกี่ยวข้องกับอัลกอริทึมซ้ำ ๆ
2) GC. การจัดสรรหน่วยความจำตาม GC นั้นแทบจะฟรีเมื่อเทียบกับ malloc และค่าปรับ 'ฟรี' สามารถตัดจำหน่ายได้ตลอดทั้งรันไทม์ซึ่งมักจะข้ามไปเนื่องจากโปรแกรมหยุดทำงานก่อนที่จะต้องรวบรวมขยะทั้งหมด
มีนักพัฒนาที่มีความสามารถสูงจำนวนหลายร้อย (หลายพันคน) ทำให้ GC / JVM มีประสิทธิภาพ การคิดว่าคุณสามารถ "เขียนโค้ดได้ดีกว่าทั้งหมด" ถือเป็นความโง่เขลา มันเป็นปัญหาอัตตาของมนุษย์ที่อยู่ในหัวใจ - มนุษย์มีช่วงเวลาที่ยากลำบากที่จะยอมรับว่าด้วยการฝึกฝนที่เหมาะสมโดยมนุษย์ที่มีความสามารถคอมพิวเตอร์จะทำงานได้ดีกว่ามนุษย์ที่ตั้งโปรแกรมไว้
Btw, C ++ สามารถเร็วเท่ากับ C ได้หากคุณไม่ได้ใช้และคุณสมบัติ OO แต่คุณก็ค่อนข้างใกล้เคียงกับการเขียนโปรแกรมใน C เพื่อเริ่มต้นด้วย
ที่สำคัญที่สุด "ความแตกต่างของความเร็ว" ในการทดสอบเหล่านี้มักจะไม่มีความหมาย ต้นทุน IO เป็นคำสั่งที่มีขนาดมากกว่าความแตกต่างของประสิทธิภาพดังนั้นการออกแบบที่เหมาะสมเพื่อลดต้นทุน IO มักจะชนะเสมอแม้ในภาษาที่ตีความ มีระบบน้อยมากที่ CPU ถูกผูกไว้
ในท้ายที่สุดผู้คนกล่าวถึง "เกมเกณฑ์มาตรฐานภาษาคอมพิวเตอร์" ว่าเป็น "การวัดผลทางวิทยาศาสตร์" การทดสอบมีข้อบกพร่องอย่างสมบูรณ์ตัวอย่างเช่นหากคุณดูการทดสอบ Java สำหรับ nbody เมื่อฉันเรียกใช้การทดสอบบน OS / ฮาร์ดแวร์เดียวกันฉันจะได้รับ Java ประมาณ 7.6 วินาทีและ 4.7 วินาทีสำหรับ C ซึ่งสมเหตุสมผลไม่ใช่ความช้า 4 เท่าที่รายงานการทดสอบ มันคือคลิกเหยื่อข่าวปลอมที่ออกแบบมาเพื่อสร้างการเข้าชมไซต์
ในที่สุดหมายเหตุสุดท้าย ... ฉันทำการทดสอบโดยใช้ Go และใช้เวลา 7.9 วินาที ความจริงที่ว่าเมื่อคุณคลิกที่ Go มันจะเปรียบเทียบกับ Java และเมื่อคุณคลิกที่ Java มันจะเปรียบเทียบกับ C ควรเป็นธงสีแดงกับวิศวกรที่จริงจัง
สำหรับการเปรียบเทียบในโลกแห่งความเป็นจริงของ Java, Go และ C ++ โปรดดูที่https://www.biorxiv.org/content/10.1101/558056v1 การแจ้งเตือนสปอยเลอร์ Java จะอยู่ในอันดับต้น ๆ ในด้านประสิทธิภาพแบบดิบโดย Go ออกมาด้านบนด้วยการใช้หน่วยความจำรวม และเวลาติดผนัง