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

为何VSCode编译的Java程序比手动javac编译的运行更快?

为何javac与ECJ编译的Java程序运行性能差异巨大,如何让javac编译版本追平?

我编写了如下基准测试程序:

public class App {

    public static void main(String[] args) {
        int n_iters = Integer.parseInt(args[0]);
        long tInit = System.currentTimeMillis();
        int c = 0;

        for (int i = 0; i < n_iters; ++i) {
            for (int j = 0; j < n_iters; ++j) {
                for (int k = 0; k < n_iters; ++k) {
                    if (i * i + j * j == k * k) {
                        ++c;
                    }
                }
            }
        }

        System.out.println(c);
        System.out.println((System.currentTimeMillis() - tInit) / 1000.0);
    }
}

我将代码放在src目录下,手动执行javac src/App.java编译;VSCode的Java扩展会自动创建bin目录并编译出App.class文件。

运行测试发现性能差异显著:

  • 执行java -cp src App 1000耗时约1.8秒
  • 执行java -cp bin App 1000仅耗时0.56秒

我原本的认知是Java编译器不做优化,性能优化由JVM的JIT编译器负责,因此这种运行时长的差异完全不符合预期。

测试环境:

  • 操作系统:Windows 11
  • JDK:Java(TM) SE Runtime Environment (build 17.0.3.1+2-LTS-6)
  • VSCode Java扩展(redhat.java):v1.10.0

[补充说明]:VSCode Java扩展使用ECJ编译器,ECJ与javac的编译方式存在差异,针对这个基准测试任务ECJ编译的代码表现更优,我现在正尝试让javac编译的程序达到相同的性能水平。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 13:30:43