Java8 vs Go执行速度

Pho*_*nix -3 java go

我正在学习Go,在此之前我一直在使用Java8。我编写了两个程序来比较Java8和Go之间的执行速度。

Java程序运行了604秒,Go运行了2334.598334749秒。有人可以帮我理解为什么Go程序即使据说运行速度更快也运行缓慢。

?  ~ java -version
java version "1.8.0_91"
Java(TM) SE Runtime Environment (build 1.8.0_91-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode)
?  ~ go version
go version go1.12.4 darwin/amd64
Run Code Online (Sandbox Code Playgroud)
?  ~ java -version
java version "1.8.0_91"
Java(TM) SE Runtime Environment (build 1.8.0_91-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode)
?  ~ go version
go version go1.12.4 darwin/amd64
Run Code Online (Sandbox Code Playgroud)
//Java
public class Solution {

  public static void main(String[] args) {

    long start = System.currentTimeMillis();
    for (int i = 0; i <= 1 * 1e8; i++) {
      System.out.println(i);
    }
    long end = System.currentTimeMillis();
    System.out.println(Duration.ofMillis(end - start).getSeconds());
  }
 }
Run Code Online (Sandbox Code Playgroud)

Gho*_*ica 9

首先:基准测试方法太幼稚了。对于事情的Java端看到这个的例子。

意思是:您的数字在很大程度上没有意义。

第二:存在误解。是的,可以编译为本机代码。但是,并非总是以高性能而闻名,例如,请参见此处。当然,Java性能来自JIT,如第一个链接所述,在测量时使其工作起来也有些棘手。

因此,简单的技术答案是:您的房屋有缺陷。

真正的问题在这里:你的示例代码打印到stdout。这印刷是这里最昂贵的操作,并且大部分时间什么也没有做的编程语言,因为到最后,我们来谈谈“文件IO”到系统控制台。

因此,回到现实,真正的重点是:您的“基准数字”几乎毫无意义。