測試邏輯:
循環10萬次輸出打印hello world
測試平台:windows

測試結果
| 語言 | 占用內存 | 包大小 | 耗時 |
|---|---|---|---|
| go | 5324k | 可執行文件:2172k | 平均8502毫秒 |
| java | 175326k | 字節碼文件:2k | 平均8537毫秒 |
| dotnetcore | 3612k | 打包發布:65.4m | 平均8371毫秒 |
截圖介紹
- go: 直接運行main.exe
代碼:
package main
import (
"fmt"
"os"
"os/signal"
"syscall"
"time"
)
func main() {
t1 := time.Now() // get current time
//logic handlers
for i := 0; i < 100000; i++ {
fmt.Println("hello world")
}
elapsed := time.Since(t1)
fmt.Println("App elapsed: ", elapsed)
sig := make(chan os.Signal, 2)
signal.Notify(sig, syscall.SIGTERM, syscall.SIGINT)
<-sig
}
發布后的目錄
- java: 運行編譯后的字節碼文件 java HelloWorld
代碼
import java.io.IOException;
public class HelloWorld {
public static void main(final String[] args) throws IOException {
final long time1 = System.currentTimeMillis();
int i = 0;
for (; i < 100000; i++) {
System.out.println("hello world");
}
final long time2 = System.currentTimeMillis();
System.out.println("當前程序耗時:" + (time2 - time1) + "ms");
System.in.read();
}
}
編譯后的目錄
- dotnetcore: 直接運行netcore_prj.exe
代碼
using System;
using System.Diagnostics;
using System.Threading.Tasks;
using System.Threading;
namespace netcore_prj
{
class Program
{
static async Task Main(string[] args)
{
var watch = new Stopwatch();
watch.Start();
for (var i = 0; i < 100000; i++)
Console.WriteLine("hello world");
watch.Stop();
Console.WriteLine($"循環100000次Say Hello World,用時:{watch.ElapsedMilliseconds}ms");
Console.ReadLine();
}
}
}
發布后的目錄
測試平台:linux centos7 (10.0.1.7)
測試結果
| 語言 | 虛擬內存 | 物理內存 | 包大小 | 耗時 |
|---|---|---|---|---|
| go | 100M | 976 | 2104k | 平均170ms |
| java | 4647M | 33660 | 4k | 平均335ms |
| dotnetcore | 2712M | 18988 | 110m | 平均144ms |
打包到以下的測試目錄:
-
go: 直接運行 nohup ./go_main &

-
java: 運行編譯后的字節碼文件 nohup java HelloWorld &

-
dotnetcore: 進入netcore目錄運行 nohup ./netcore_prj &

-
PID:進行的標識號
- USER:運行此進程的用戶
- PRI:進程的優先級
- NI:進程的優先級別值,默認的為0,可以進行調整
- VIRT:進程占用的虛擬內存值
- RES:進程占用的物理內存值
- SHR:進程占用的共享內存值
- S:進程的運行狀況,R表示正在運行、S表示休眠,等待喚醒、Z表示僵死狀態
- %CPU:該進程占用的CPU使用率
- %MEM:該進程占用的物理內存和總內存的百分比
- TIME+:該進程啟動后占用的總的CPU時間
- COMMAND:進程啟動的啟動命令名稱
