起因:
- 作者本人我在知乎上看到很多人都在讨论这问题
- 所以想做下纳秒级运算的测试
前置声明:
- 双方都在
同一台电脑下 进行实验
- 双方都在
程序内部 进行时间计算
- 实验中有一方
需要 读取文件 进行 解释执行
- 公平起见,
不借助于 第三方工具 进行 性能测试
- 双方
编译器版本
为 当前当前最新版(2019-10-21)
- Java 编译器版本:
javac 13.0.1
- Golang 编译器版本:
go version go1.13.3 windows/amd64
- 双方
源码保证输出一致
,并且 意义一致
- 双方都
进行编译
,并使用 相应的执行方法
- 双方以
100次结果
的 消耗时间
取 平均值的整数
为 对比值
Java:
源码:
class main {
public static void main(String[] args) {
long a = System.nanoTime();
int i = 1;
while (i < 10000000) {
i += i;
System.out.println("i: " + String.valueOf(i));
}
System.out.println("最终值: " + String.valueOf(i));
System.out.println("时间: " + String.valueOf(System.nanoTime() - a) + " 纳秒");
}
}
编译 & 执行:
javac main.java
java main
Golang:
源码:
package main
import "time"
func main() {
a := time.Now().Nanosecond()
i := 1
for i < 10000000 {
i += i
println(`i:`, i)
}
println(`最终值:`, i)
println(`时间:`, time.Now().Nanosecond()-a, `纳秒`)
}
编译 & 执行:
go build main.go
./main.exe
双方输出结果:
i: 2
i: 4
i: 8
i: 16
i: 32
i: 64
i: 128
i: 256
i: 512
i: 1024
i: 2048
i: 4096
i: 8192
i: 16384
i: 32768
i: 65536
i: 131072
i: 262144
i: 524288
i: 1048576
i: 2097152
i: 4194304
i: 8388608
i: 16777216
最终值: 16777216
消耗时间:
Java:
时间: 13408033 纳秒 (0.013408033 秒)
Golang:
时间: 5316000 纳秒 (0.005316 秒)
消耗时间比:
Java : Golang ≈ 2.52 : 1
结论:
- 以
消耗时间比
为根据
-
Golang
的 执行效率(即性能)
是 Java
的 2.5倍