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的输出所示。

总结

对于面试还是要好好准备的,尤其是有些问题还是很容易挖坑的,例如你为什么离开现在的公司(你当然不应该抱怨现在的公司有哪些不好的地方,更多的应该表明自己想要寻找更好的发展机会,自己的一些现实因素,比如对于我而言是现在应聘的公司离自己的家更近,又或者是自己工作到达了迷茫期,想跳出迷茫期等等)

image

Java面试精选题、架构实战文档

整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~

你的支持,我的动力;祝各位前程似锦,offer不断!

现实因素,比如对于我而言是现在应聘的公司离自己的家更近,又或者是自己工作到达了迷茫期,想跳出迷茫期等等)

[外链图片转存中…(img-ljaPedmZ-1714332262468)]

Java面试精选题、架构实战文档

整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~

你的支持,我的动力;祝各位前程似锦,offer不断!

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

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是关于 Go、Rust 和其他一些编程语言的特点介绍: 1. Go 语言特点: - Go 语言是一种并发编程语言,它的并发模型非常强大和高效,可以在多核环境下实现高并发的应用程序。 - Go 语言的代码简单易读,语法简洁,易于上手。 - Go 语言具有垃圾回收机制,可以自动管理内存,避免了程序员手动管理内存的繁琐。 - Go 语言支持函数式编程和面向对象编程,可以根据需要进行选择。 - Go 语言的编译速度非常快,可以在几秒钟内编译一个大型的应用程序。 2. Rust 语言特点: - Rust 语言是一种内存安全的编程语言,可以避免内存泄漏和野指针等问题,提高了程序的稳定性和可靠性。 - Rust 语言具有强大的类型系统,可以在编译时检查类型错误,避免了运行时错误。 - Rust 语言支持并发编程和函数式编程,具有高性能和高效率。 - Rust 语言的学习曲线比较陡峭,需要一定的编程经验和技能。 3. 其他语言特点: - Java:面向对象编程语言,具有垃圾回收机制,适合于大型企业级应用开发。 - Python:动态脚本语言,语法简单易读,适合于快速开发原型和小型应用。 - C/C++:系统级编程语言,具有高性能和高效率,可以直接操作硬件资源。 - JavaScript:Web 前端开发语言,可以实现丰富的交互效果和动态网页。 - Swift:苹果公司开发的编程语言,适用于 iOS 和 macOS 应用开发。 以上是 Go、Rust 和其他一些编程语言的一些特点介绍,希望可以帮助你更好地了解它们。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值