当前位置:Java -> 比较Spring Boot项目和Go项目的效率

比较Spring Boot项目和Go项目的效率

AngularAndSpringWithMaps 是一个展示公司物业在Bing地图上的Sprint Boot项目,可以在JDK上运行,也可以作为GraalVM本地映像运行。 ReactAndGo 是一个Golang项目,展示你所在邮政编码地区的最便宜的加油站,并编译成二进制文件。这两种语言都是有垃圾收集功能的,AngularAndSpringWithMaps项目使用了G1垃圾收集器。两个项目的复杂性可以相互比较。它们都作为前端,为前端提供rest数据端点,实现了逻辑的服务,并使用存储库进行数据库访问。如何构建 GraalVM 用于AngularAndSpringWithMaps项目的本地映像在这篇 文章 中有所解释。

要比较的内容

在性能方面, Golang 和Java在 JVM 上运行,或作为本地映像均为绝大多数用例提供了足够快速和高效的运行。进一步的性能微调需要良好的分析和特定的改进,往往与数据库相关。

两个有趣的方面是:

  • 内存需求
  • 启动时间(包括预热)

内存需求很重要,因为Kubernetes节点或部署服务器的可用内存限制大多会比CPU限制更早达到。如果使用更少的内存,您就可以在该资源上部署更多的Docker映像或Spring Boot应用程序。

若您的应用程序有低负载和高负载的周期,则启动时间很重要。启动时间越短,您就可以更积极地增加或减少部署应用程序/映像的数量。

内存需求

  • 420 MB AngularAndSpringWithMaps JVM 21
  • 280 MB AngularAndSpringWithMaps GraalVM本地映像
  • 128-260 MB ReactAndGo二进制文件

GraalVM本地映像所需的内存明显少于JVM jar。这使得本地映像更加资源高效。本地映像二进制文件大小为240 MB,意味着工作内存为40 MB。

ReactAndGo二进制文件大小为29 MB,根据其需要处理的更新大小而使用128-260 MB的内存。这意味着,如果使用情况只需要40 MB工作内存,像GraalVM本地映像一样,70 MB就足够运行它。这使得Go二进制文件更加资源高效。

启动时间

  • 4300ms AngularAndSpringWithMaps JVM 21
  • 220ms AngularAndSpringWithMaps GraalVM本地映像
  • 100ms ReactAndGo二进制文件

GraalVM本地映像的启动时间令人印象深刻,并且可以启用按需启动并在无负载时缩减到零的配置。JVM启动时间最少需要一个运行实例。

ReactAndGo二进制文件的启动时间是最快的,并且可以缩减至零。

结论

在这项比较中,GraalVM本地映像和Go二进制文件是最高效的。由于其较低的内存需求,可以更高效地使用CPU资源。快速的启动时间使得可以实现按需扩展到零的配置,这在按需环境中可以节省资金。优胜者是Go项目。

结果是,如果您最在乎硬件资源的有效利用,那么Go是最好的选择。如果您的开发人员更熟悉Java,那么使用GraalVM本地映像可以提高硬件资源的有效利用。但创建GraalVM本地映像需要更多的工作量和开发人员时间。其中一些工作可以自动化完成,而另一些工作则较难。于是问题就变成了:额外的开发时间是否值得节省的硬件资源?

推荐阅读: Chatgpt到底是个啥

本文链接: 比较Spring Boot项目和Go项目的效率