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

复制Java BigInteger源码后乘法性能仅为原生1/3,原因是什么?

原生BigInteger与自定义编译BigInteger乘法性能差异原因
  • 核心诱因是HotSpot JVM对JDK原生java.math.BigInteger的乘法相关方法做了固有方法(Intrinsic)特殊优化。JVM运行时会将原生BigInteger的乘法核心方法直接替换为手写的底层优化实现,部分优化逻辑会适配CPU的AVX、BMI等扩展指令集做并行运算加速,性能远高于纯Java字节码的实现版本。
  • 你自行复制BigInteger源码到项目中编译生成的类,不属于JDK原生java.math包路径,也不是由启动类加载器加载的JDK核心类,因此完全无法触发JVM的固有方法优化,只能执行普通Java字节码版本的乘法逻辑,性能仅为原生实现的1/3左右。
  • 加法性能无明显差异的原因是:大整数加法的逻辑本身复杂度较低,纯Java实现的性能已经接近硬件执行上限,JVM没有为加法方法额外做固有方法优化,因此两者表现基本一致。

你可以通过在JVM启动参数中添加-XX:+PrintIntrinsics执行基准测试验证该结论:日志输出中可以看到原生BigInteger的multiply相关方法会被标记为固有方法,你自定义的BigInteger方法不会出现该标记。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 13:09:04