测试逻辑:
循环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)
}
发布后的目录
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:进程启动的启动命令名称