这是Java,Go和Rust之间的比较。这不是基准测试,而是关于:可执行文件大小、内存使用、CPU使用率、运行时要求之间的比较,当然还有一个小的基准测试,可以每秒获取一些请求。

测试三个Web服务的存储库托管在github上。直接看结论:

结论

在得出任何结论之前,我想指出这三种语言之间的关系(或缺乏)。Java和Go都是垃圾收集语言,但是Java会提前编译为在JVM上运行的字节码。启动Java应用程序时,将随时随地(JIT)编译器调用,以通过将字节码编译为本地代码来优化字节码,以提高应用程序的性能。

Go和Rust都提前编译为本地代码,并且在运行时不会进行进一步的优化。

Java和Go都是垃圾收集语言,具有暂停应用导致类似世界末日的副作用。这意味着,每当垃圾收集器运行时,它将停止应用程序,进行垃圾收集,并在完成后从停止的地方恢复应用程序。大多数垃圾收集器需要停止运行,但是有些实现似乎不需要这样做。

当Java语言在90年代创建时,其最大的卖点之一是一次编写,可在任何地方运行。当时这非常好,因为市场上没有很多虚拟化解决方案。如今,大多数CPU支持虚拟化,这种虚拟化仅在代码可以在任何地方(无论如何在任何受支持的平台上运行)的前提下,才停止使用某种语言进行开发的诱惑。Docker和其他解决方案以便宜的价格提供虚拟化。

在整个测试中,应用程序的Java版本比Go或Rust对应版本消耗了更多的内存,在前两个测试中,Java使用的内存大约增加了8000%。这意味着对于实际应用程序,Java应用程序的运行成本会更高。

对于前两个测试,Go应用程序使用的CPU比Java少20%,同时处理38%的请求。另一方面,Rust版本使用的CPU比Go减少了57%,而处理的请求却增加了13%。

第三次测试在设计上是占用大量CPU的资源,因此我想从中挤出CPU的每一分。Go和Rust都比Java使用了1%的CPU。而且我认为,如果wrk不是在同一台计算机上运行,​​那么这三个版本都会使CPU的上限为100%。在内存方面,Java使用的内存比Go和Rust多2000%。Java可以处理的请求比Go多出20%,而Rust可以处理的请求比Java多出15%。

在撰写本文时,Java编程语言已经存在了将近30年,这使得在市场上寻找Java开发人员变得相对容易。另一方面,Go和Rust都是相对较新的语言,因此与Java相比,自然而然的数量或更少的开发人员。不过,Go和Rust都获得了很大的吸引力,许多开发人员正在将它们用于新项目,并且有许多使用Go和Rust的生产中正在运行的项目,因为简单地说,就资源而言,它们比Java更有效。(也许是因为它们是街上的新酷语言!)

在编写本文的程序时,我同时学习了Go和Rust。就我而言,Go的学习曲线很短,因为它是一种相对容易掌握的语言,并且与其他语言相比语法很小。我只用了几天就用Go编写了程序。关于Go需要注意的一件事是编译速度,我不得不承认,与Java / C / C ++ / Rust等其他语言相比,它的速度非常快。该程序的Rust版本花了我大约一个星期的时间来完成,Rust具有严格的所有权规则,但是一旦掌握了Rust的所有权和借用概念,编译器错误消息就会突然变得更加有意义。违反借阅检查规则时Rust编译器对您大吼的原因,这是因为编译器希望在编译时证明已分配内存的寿命和所有权。这样做可以保证程序的安全性(例如:没有悬挂的指针,除非使用了不安全的代码转义),并且在编译时确定了释放位置,从而消除了垃圾收集器的需求和运行时成本。当然,这是以学习Rust的所有权系统为代价的。

在竞争方面,我认为Go是Java(通常是JVM语言)的直接竞争对手,但不是Rust的竞争对手。另一方面,Rust是Java,Go,C和C ++的重要竞争对手。

Rust比Go具有根本优势。它不是垃圾收集的语言,与C和C ++相比,它可以安全地编写代码。例如,Go并不是特别适合用于编写OS内核,而这里又是Rust的亮点,并与C / C ++竞争,因为它们是使用OS编写的长期存在和事实上的语言。Rust与C竞争的另一种方式/ C ++在嵌入式世界中。

rust go java 性能_Java,Go和Rust之间的比较 - Dexter相关推荐

  1. java会被rust替代吗_自从尝了 Rust,Java 突然不香了

    Rust 是软件行业中相对而言比较新的一门编程语言,如果从语法上来比较,该语言与 C++ 其实非常类似,但从另一方面而言,Rust 能更高效地提供许多功能来保证性能和安全.而且,Rust 还能在无需使 ...

  2. Java脑洞程序编写怎么写,脑洞丨自从尝了Rust,Java突然不香了

    原标题:脑洞丨自从尝了Rust,Java突然不香了 作者 | Sayan Dey 译者 | 杨志昂 策划 | 冬梅 Rust 是软件行业中相对而言比较新的一门编程语言,如果从语法上来比较,该语言与 C ...

  3. C++和Rust_自从尝了 Rust,Java 突然不香了

    作者 | Sayan Dey策划 | 李冬梅 相对而言,Rust 是软件行业中比较新的一门编程语言,如果从语法上来比较,该语言与 C++ 其实非常类似,但从另一方面而言,Rust 能更高效地提供许多功 ...

  4. C++和Rust_自从尝了Rust,Java突然不香了

    作者 | Sayan Dey 译者 | 杨志昂 策划 | 冬梅Rust 是软件行业中相对而言比较新的一门编程语言,如果从语法上来比较,该语言与 C++ 其实非常类似,但从另一方面而言,Rust 能更高 ...

  5. java性能优化权威指南_Java性能优化权威指南 PDF扫描[132MB]

    Java性能优化权威指南主要为Java SE 和Java EE 应用的性能调优提供建议.主要包括以下几方面:性能监控.性能分析.Java HotSpot VM 调优.高效的基准测试以及Java EE ...

  6. 开源java性能分析工具_Java性能监控:您应该知道的5个开源工具

    开源java性能分析工具 鲜为人知但有用:开源应用程序性能监视的状态 对于任何应用程序来说,最重要的事情之一就是性能. 我们要确保用户获得他们能获得的最佳体验,并想知道我们的应用已启动并正在运行. 这 ...

  7. java 性能 优化_Java十大简单性能优化

    java 性能 优化 关于" web scale "这个流行词有很多炒作,人们花了很多时间来重新组织他们的应用程序体系结构,以使其系统"规模化". 但是什么是扩 ...

  8. java 性能调优_Java性能调优调查结果(第四部分)

    java 性能调优 这是本系列中的最后一篇文章,我们将分析我们在2014年10月进行的Java Performance Tuning Survey的结果.如果您尚未阅读第一篇文章,建议您首先阅读以下内 ...

  9. java 性能调优_Java性能调优调查结果(第三部分)

    java 性能调优 这是本系列文章的第三篇,我们将分析2014年10月进行的调查的结果.如果您尚未这样做,我建议从本系列的前两篇文章开始: 问题严重性分析和监视域分析 . 这篇文章着重于故障排除/根本 ...

最新文章

  1. LeetCode简单题之将找到的值乘以2
  2. 2.4.1 死锁的概念
  3. php中cookie的工作原理,cookie工作原理_PHP教程
  4. 韶关无线电厂台式计算机,中国芯片30年的历史 它背后有哪些不为人知的故事?...
  5. 38动感菜单 38 jQuery And CSS Drop Down Multi Level Menu Solutions
  6. linux文件删除恢复
  7. 【kafka】scalac compiled against an incompatible version of joptsimple
  8. 网管员、工程师 、专家 的岗位描述
  9. php中的加密解密模块-mcrypt
  10. 企业微信hook,企业微信软件
  11. 学习类APP如何规范
  12. android dff播放器,无损音乐解码播放器
  13. 传感器实验——LCD显示SHT20
  14. C++ MFC 如何画一个空心的即透明填充色的图形如矩形,圆形等
  15. PHPNow 本地服务器安装
  16. 反相器有时候为了强调低电平有效,将反相器的图形符号中的小圆圈画在输入端,如数电中的画法。有时候小圆圈在前面只表示低电平有效,没有反相的意思,例如与非门组成的RS触发器
  17. Unity 3D 接入 移动MM (3.1.3)计费SDK
  18. sql中exist与in 的区别
  19. 计算机一级常用计算公式,软考网络工程师常用计算公式汇总1
  20. 小白UEFI启动如何设置

热门文章

  1. [Spring Framework]学习笔记--Dependency injection(DI)
  2. C#如何判断质数(转)
  3. [未解决]jQuery中autocomplete的source格式问题
  4. editorloop 占用_systemd CPU占用100%,并出现大量僵尸进程
  5. linuxpython重定向_linux命令重定向、、 1、 2、 1、 2、
  6. win10浏览器_Win10系统中ie浏览器的证书错误应该如何解决?
  7. java控制器接收请求参数_SpringMVC之接收请求参数和页面传参
  8. php 状态模式,PHP设计模式(十九)—状态模式 (State Pattern)
  9. python面对对象汉诺塔_如何使用python实现的汉诺塔的小程序
  10. 计算机无法用telnet,为何我的电脑cmd没法使用telnet命令?