Có hai lý do cơ bản khiến Java nhanh hơn Go và C ++, và có thể nhanh hơn C trong nhiều trường hợp:
1) Trình biên dịch JIT. Nó có thể nội tuyến các cuộc gọi hàm ảo qua nhiều cấp, ngay cả với các lớp OO, dựa trên cấu hình thời gian chạy. Điều này là không thể trong một ngôn ngữ được biên dịch tĩnh (mặc dù việc biên dịch lại mới hơn dựa trên hồ sơ đã ghi có thể giúp ích). Điều này rất quan trọng đối với hầu hết các điểm chuẩn liên quan đến các thuật toán lặp lại.
2) GC. Phân bổ bộ nhớ dựa trên GC gần như miễn phí, so với malloc. Và hình phạt 'miễn phí' có thể được khấu hao trong toàn bộ thời gian chạy - thường bị bỏ qua vì chương trình kết thúc trước khi tất cả rác cần được thu gom.
Có hàng trăm (hàng nghìn?) Các nhà phát triển cực kỳ tài năng đang làm cho GC / JVM trở nên hiệu quả. Nghĩ rằng bạn có thể "viết mã tốt hơn tất cả chúng" là một điều ngu ngốc. Đó là vấn đề về bản ngã của con người - con người khó chấp nhận rằng với sự đào tạo thích hợp bởi những con người tài năng, máy tính sẽ hoạt động tốt hơn con người đã lập trình nó.
Btw, C ++ có thể nhanh như C nếu bạn không sử dụng và các tính năng OO, nhưng sau đó bạn đã khá gần với việc chỉ lập trình bằng C để bắt đầu.
Quan trọng nhất, "sự khác biệt về tốc độ" trong các bài kiểm tra này thường là vô nghĩa. Chi phí IO là những đơn hàng có mức độ lớn hơn sự khác biệt về hiệu suất, và do đó những thiết kế phù hợp để giảm thiểu chi phí IO luôn giành được chiến thắng - ngay cả trong một ngôn ngữ thông dịch. Rất ít hệ thống bị ràng buộc bởi CPU.
Lưu ý cuối cùng, mọi người gọi "trò chơi điểm chuẩn ngôn ngữ máy tính" như một "thước đo khoa học". Các bài kiểm tra hoàn toàn thiếu sót, Ví dụ: nếu bạn xem các bài kiểm tra Java cho nbody. Khi tôi chạy các bài kiểm tra trên cùng một hệ điều hành / phần cứng, tôi nhận được khoảng 7,6 giây đối với Java và 4,7 giây đối với C - điều này là hợp lý - chứ không phải là 4 lần độ chậm mà các bài kiểm tra báo cáo. Nó là mồi nhấp chuột, tin tức giả, được thiết kế để tạo ra lưu lượng truy cập trang web.
Cuối cùng, ghi chú cuối cùng ... Tôi đã chạy các bài kiểm tra bằng cách sử dụng Go, và nó là 7,9 giây. Thực tế là khi bạn nhấp vào Go, nó sẽ so sánh nó với Java và khi bạn nhấp vào Java, nó sẽ so sánh nó với C, sẽ là một lá cờ đỏ đối với bất kỳ kỹ sư nghiêm túc nào.
Để so sánh thực tế về Java, Go và C ++, hãy xem https://www.biorxiv.org/content/10.1101/558056v1 cảnh báo spoiler, Java xuất hiện hàng đầu về hiệu suất thô, với Go đi đầu với việc sử dụng bộ nhớ kết hợp và thời gian tường.