You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Java Arrays.sort(int[])比C++ std::sort(vector<int>)快5倍?

Java与C++排序性能对比基准测试疑问

我正在开展Java与C排序性能对比基准测试,意外发现即使C以-O3编译Release版本,Java的Arrays.sort(int[])仍比C++的std::sort(std::vector<int>)快5倍以上。此外,在同一JVM进程、相同数据(仅将int替换为Integer)、相同规模下,Java Arrays.sort(int[])比Collections.sort(List)快30倍以上,体现了原生数组排序与基于对象的集合排序之间的巨大性能差距。

测试设置

  • Java使用Arrays.sort(int[])对新生成的int[]排序
  • Java同时测试基于相同输入的Collections.sort(List)
  • C++使用mt19937生成输入,调用std::sort(std::vector<int>)
  • 所有测试重复执行至总测量时间超1秒

C++编译配置

set(CMAKE_CXX_STANDARD 20)
target_compile_options(sort PRIVATE $<$<CONFIG:Release>:-O3>)

(CMake Release配置已默认启用-O3),GCC与Clang编译结果一致。

疑问

  1. 对C++ std::sort或Java排序的调用、时间测量方式是否存在问题?
  2. Java的Arrays.sort(int[])是否真的经过极致优化?
  3. 为何Java原生数组排序比自身基于对象的Collections.sort()快30倍?

补充说明

  • 为聚焦Java与C++对比,注释了Java装箱Integer的耗时测试
  • 测试重复至少4次,取最短耗时避免异常值干扰
  • 插桩显示C++比较次数比Java多约28%,但无法完全解释性能差距
  • 当前使用Java 24.0.1、GCC/Clang Release版本

500万数据典型结果

Java

size 5000000
nTrials=14 worst/best=1.293286 avg/best=1.072794
array sort time 70.512346 ms
array sort time/size/log2(size) 0.633719 ns

C++(GCC)

size 5000000
nTrials = 4
worst/best = 1.02853
avg/best = 1.01016
vector sort time 393.92 ms
vector sort time/size/log2(size) = 3.54029 ns
cpp/java = 5.58654

内容的提问来源于stack exchange,提问作者Saku

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 02:21:03