目前开发中爆火的Java、Go和Rust间的比较!(1)

本文探讨了作者如何使用Java、Go和Rust构建二进制文件,分析了不同语言在内存占用和性能方面的差异,包括空闲状态和REST请求处理。重点介绍了Java的内存消耗问题以及在/fibonacci端点的递归实现导致的超时问题。
摘要由CSDN通过智能技术生成

介绍下我是如何构建二进制文件的。在Java示例中,我使用maven-shade-plugin[2]插件并使用mvn package命令,Go则使用go build命令,最后是Rust则使用cargo build --release。

制品编译的大小也取决于所选的库/依赖项,因此,如果它们膨胀了,那么编译的程序也会是同样的结果。在此处特定情况下,对于我所选择的库,上图显示是程序编译的大小。

在下面单独的部分中,我将构建所有三个程序并打包成Docker镜像,并列出它们的大小,以及显示每种语言所需的运行时开销。更多细节如下。

内存使用情况

空闲状态

什么?在空闲运行时显示内存占用的Go和Rust版本的条形图在哪?好吧,它们是有的,只是Java在JVM启动程序,处于空闲时,什么都不做的情况下,就消耗了高达160MB的内存。在Go的情况下,程序使用了0.86 MB,在Rust的情况下使用0.36 MB。这是一个非常大的区别!在这里,Java比Go和Rust对应的程序多用了两个数量级的内存,只是空跑内存什么也不做。这是对资源的巨大浪费。

提供REST请求

我们使用wrk[3]来请求API,并观察内存和CPU使用情况,以及三个版本的程序的每个端点在我的机器上的每秒请求数。

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个开启的连接,并反复调用GET端点,持续30秒。此处我只使用两个线程,是因为wrk跟被测试的程序都运行在同一台机器上,因此我不想它们在可用资源,尤其是CPU上相互竞争。

每个Web服务都单独测试,且每次运行测试都会重启Web服务。

以下是每个版本的程序三次运行中的最佳结果。

/hello

该端点返回一个“Hello, World!”的消息。它分配字符串 “Hello, World!”,并将其序列化,以JSON格式返回。

/greeting/{name}

该端点接受段路径参数{name},然后将字符串"Hello,{name}"格式化,序列化并返回以JSON格式的问候信息。

/fibonacci/{number}

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

对于这个特定的端点,我选择用递归的形式来实现它。我知道,毫无疑问,迭代实现可以获得更好的性能结果,而且出于生产目的,应该选择迭代形式,但是在生产代码中,有些情况下必须使用递归(非特指专用于计算斐波那契数)。因此我想让这个实现与CPU堆栈分配密切相关。

在/fibonacci端点测试中,Java实现是唯一一个出现150次请求超时的,wrk输出如下所示:

运行时大小

最后

作为过来人,小编是整理了很多进阶架构视频资料、面试文档以及PDF的学习资料,针对上面一套系统大纲小编也有对应的相关进阶架构视频资料


作为过来人,小编是整理了很多进阶架构视频资料、面试文档以及PDF的学习资料,针对上面一套系统大纲小编也有对应的相关进阶架构视频资料

[外链图片转存中…(img-WzqNGn7Y-1714763809212)]
[外链图片转存中…(img-rH6WMiLm-1714763809212)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 22
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值