Java、Go 和 Rust 的比较

每个程序的编译大小(以兆字节为单位)。

工程编译的大小还取决于所选的库/依赖项,在我的具体情况下,以上是编译后的程序大小。

在单独的部分中,我将构建所有三个程序并将其打包为 docker 映像,并将列出它们的大小以及显示每种语言所需的运行时开销。更多详情如下。

内存使用情况


没有任何请求的情况下

每个应用程序在内存中空闲时的内存使用情况。

Go 和 Rust 版本在空闲时显示内存占用几乎看不到,只是当 JVM 启动程序并闲置不做任何事情时,Java 消耗了 160 MB 以上的空间。在 Go 的情况下,程序使用 0.86 MB,在 Rust 的情况下使用 0.36 MB。这是一个很大的不同! 因为这是在内存中什么也不做情况下 ,Java 内存占用比 Go 和 Rust 对应物多两个数量级,所以这是对资源的巨大浪费。

REST 请求

让我们使用 wrk 通过请求访问 API 并观察内存和 CPU 使用情况,以及我的机器上针对程序的三个版本的每个请求地址请求的 qps。

wrk -t2 -c400 -d30s http://127.0.0.1:8080/hello

wrk -t2 -c400 -d30s http://127.0.0.1:8080/greeting/Jane

wrk -t2 -c400 -d30s http://127.0.0.1:8080/fibonacci/35

关于上面的 wrk 命令说如下,使用两个线程(用于 wrk)并在池中保持 400 个打开的连接,并在 30 秒的持续时间内重复调用 GET 请求。这里我只使用了两个线程,因为 wrk 和被测程序都在同一台机器上运行,所以我不希望它们在可用资源上(尤其是 CPU)相互竞争。

每个 Web 服务都分别进行了测试,并且在每次运行之间重新启动了 Web 服务。下面这个请求是该程序每个版本的三个运行中最好的一个。

/hello

此请求返回 Hello, World! 信息。它分配字符串“Hello, World!” 并将其序列化并以 JSON 格式返回。

请求 /hello 时的 CPU 使用率

访问 /hello 时的内存使用情况

访问 /hello qps

/greeting/{name}

此请求接受段路径参数 { name },然后格式化字符串“ Hello, {name}!” , 将其序列化并作为 JSON 格式的问候消息返回。

请求 /greeting/{name} 时的 CPU 使用率

访问 /greeting/{name} 时的内存使用情况

访问 /greeting/{name} qps

/fibonacci/{number}

此端点接受段路径参数 { number } 并返回斐波那契数和序列化为 JSON 格式的输入数字。

这个特定接口我选择以递归形式实现它。毫无疑问通过迭代实现会产生更好的性能结果,并且出于生产目的,应该选择迭代形式,但是在生产代码中存在必须使用递归的情况(不一定是专门用于计算第 n 个斐波那契数)。另外为了测试性能对比,通过该实现能够使大量 CPU 参与堆栈分配。

请求 /fibonacci/{number} 时的 CPU 使用率

访问 /fibonacci/{number} 时的内存使用情况

访问 /fibonacci/{number} qps

在 Fibonacci 接口期间,Java 实现是唯一一个在 150 个请求上出现超时的编程语言,如下面wrk的输出所示。

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!

加入社区》https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0
)]
[外链图片转存中…(img-AGKDSUIf-1725692388878)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!

加入社区》https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值