测试go和java计算20000以内的素数(质数)所用的时间
go源代码:test.go
package main
import (
"fmt"
"time"
)
func myFunc2(n int) bool {
if n < 2 {
return false
}
flag := true
for i := 2; i < n; i++ {
if n%i == 0 {
flag = false
break
}
}
return flag
}
func main() {
//res := make(chan int, 20000)
var res []int
//start := time.Now().UnixMicro()
start := time.Now().UnixMilli()
var flag bool
for i := 0; i < 20000; i++ {
flag = myFunc2(i)
if flag {
//fmt.Printf("%d %s 素数\n", i, If(flag, "是", "否"))
//fmt.Printf("%d ", i)
res = append(res, i)
}
}
//end := time.Now().UnixMicro()
end := time.Now().UnixMilli()
fmt.Printf("耗时:%d毫秒,数量:%d\n", end-start, len(res))
//for i := 0; i < len(res); i++ {
// fmt.Printf("%d ", res[i])
//}
var name string
fmt.Scanln(&name)
fmt.Printf("%s",&name)
}
java源代码:Test.java
//package MyTest;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class Test {
public static boolean myFunc(int n) {
if (n < 2) {
return false;
}
boolean flag = true;
for (int i = 2; i < n; i++ ){
if (n%i == 0) {
flag = false;
break;
}
}
return flag;
}
public static void main(String[] args) throws IOException {
List<Integer> res = new ArrayList<>();
long start = System.currentTimeMillis() ;
boolean flag ;
for (int i = 0; i < 20000; i++ ){
flag = myFunc(i);
if (flag) {
//fmt.Printf("%d %s 素数\n", i, If(flag, "是", "否"))
//fmt.Printf("%d ", i)
res.add(i);
}
}
long end = System.currentTimeMillis();
System.out.printf("耗时:%d毫秒,数量:%d\n", end-start,res.size());
// for (int i = 0; i < res.size(); i++) {
// System.out.printf("%d ",res.get(i));
// }
int read = System.in.read();
}
}
go和java占用内存对比
go内存:
java内存:
go和java运行时间对比
go运行时间:
java运行时间:
语言 | 耗时 | 内存 |
go | 140毫秒 | 10,484kB |
java | 51毫秒 | 12,608KB |
结论
单线程下,go性能不如java,go占用内存小,java占用内存多。