Java가 Go 및 C ++보다 빠르며 대부분의 경우 C보다 빠를 수있는 두 가지 기본 이유가 있습니다.
1) JIT 컴파일러. 런타임 프로필을 기반으로 OO 클래스에서도 여러 수준을 통해 가상 함수 호출을 인라인 할 수 있습니다. 이것은 정적으로 컴파일 된 언어에서는 불가능합니다 (기록 된 프로필을 기반으로 한 최신 재 컴파일이 도움이 될 수 있음). 이것은 반복적 인 알고리즘을 포함하는 대부분의 벤치 마크에서 매우 중요합니다.
2) GC. GC 기반 메모리 할당은 malloc에 비해 거의 무료입니다. 그리고 '무료'페널티는 전체 런타임에 걸쳐 상각 될 수 있습니다. 모든 가비지가 수집되기 전에 프로그램이 종료되기 때문에 종종 건너 뜁니다.
GC / JVM을 효율적으로 만드는 매우 재능있는 개발자가 수백 명 (수천?) 있습니다. "모든 것보다 더 잘 코딩"할 수 있다고 생각하는 것은 어리석은 일입니다. 그것은 인간의 자아 문제입니다. 인간은 재능있는 인간의 적절한 훈련을 받으면 컴퓨터가 그것을 프로그래밍 한 인간보다 더 잘 수행 될 것이라는 사실을 받아들이 기가 어렵습니다.
Btw, C ++는 OO 기능을 사용하지 않으면 C만큼 빠를 수 있지만 처음에는 C로 프로그래밍하는 데 매우 가깝습니다.
가장 중요한 것은 이러한 테스트의 "속도 차이"가 일반적으로 의미가 없다는 것입니다. IO 비용은 성능 차이보다 훨씬 더 많으므로 IO 비용을 최소화하는 적절한 설계는 통역 언어에서도 항상 승리합니다. CPU 바운드 시스템은 거의 없습니다.
마지막으로, 사람들은 "컴퓨터 언어 벤치 마크 게임"을 "과학적 측정"이라고합니다. 예를 들어 nbody에 대한 Java 테스트를 보면 테스트에 완전히 결함이 있습니다. 동일한 OS / 하드웨어에서 테스트를 실행하면 Java의 경우 약 7.6 초, C의 경우 4.7 초가 소요됩니다. 이는 합리적입니다. 테스트가보고하는 속도의 4 배가 아닙니다. 사이트 트래픽을 생성하도록 설계된 클릭 미끼, 가짜 뉴스입니다.
마지막으로 마지막 메모로 ... Go를 사용하여 테스트를 실행했는데 7.9 초였습니다. Go를 클릭하면 Java와 비교하고 Java를 클릭하면 C와 비교한다는 사실은 진지한 엔지니어에게 위험 신호가되어야합니다.
Java, Go 및 C ++의 실제 비교를 보려면 https://www.biorxiv.org/content/10.1101/558056v1 스포일러 경고를 참조 하십시오 . Java는 원시 성능에서 1 위를 차지하고 Go는 결합 된 메모리 사용으로 상위에 올랐습니다. 그리고 벽 시간.