rust go java 性能_Java,Go和Rust之间的比较 - Dexter
这是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相关推荐
- java会被rust替代吗_自从尝了 Rust,Java 突然不香了
Rust 是软件行业中相对而言比较新的一门编程语言,如果从语法上来比较,该语言与 C++ 其实非常类似,但从另一方面而言,Rust 能更高效地提供许多功能来保证性能和安全.而且,Rust 还能在无需使 ...
- Java脑洞程序编写怎么写,脑洞丨自从尝了Rust,Java突然不香了
原标题:脑洞丨自从尝了Rust,Java突然不香了 作者 | Sayan Dey 译者 | 杨志昂 策划 | 冬梅 Rust 是软件行业中相对而言比较新的一门编程语言,如果从语法上来比较,该语言与 C ...
- C++和Rust_自从尝了 Rust,Java 突然不香了
作者 | Sayan Dey策划 | 李冬梅 相对而言,Rust 是软件行业中比较新的一门编程语言,如果从语法上来比较,该语言与 C++ 其实非常类似,但从另一方面而言,Rust 能更高效地提供许多功 ...
- C++和Rust_自从尝了Rust,Java突然不香了
作者 | Sayan Dey 译者 | 杨志昂 策划 | 冬梅Rust 是软件行业中相对而言比较新的一门编程语言,如果从语法上来比较,该语言与 C++ 其实非常类似,但从另一方面而言,Rust 能更高 ...
- java性能优化权威指南_Java性能优化权威指南 PDF扫描[132MB]
Java性能优化权威指南主要为Java SE 和Java EE 应用的性能调优提供建议.主要包括以下几方面:性能监控.性能分析.Java HotSpot VM 调优.高效的基准测试以及Java EE ...
- 开源java性能分析工具_Java性能监控:您应该知道的5个开源工具
开源java性能分析工具 鲜为人知但有用:开源应用程序性能监视的状态 对于任何应用程序来说,最重要的事情之一就是性能. 我们要确保用户获得他们能获得的最佳体验,并想知道我们的应用已启动并正在运行. 这 ...
- java 性能 优化_Java十大简单性能优化
java 性能 优化 关于" web scale "这个流行词有很多炒作,人们花了很多时间来重新组织他们的应用程序体系结构,以使其系统"规模化". 但是什么是扩 ...
- java 性能调优_Java性能调优调查结果(第四部分)
java 性能调优 这是本系列中的最后一篇文章,我们将分析我们在2014年10月进行的Java Performance Tuning Survey的结果.如果您尚未阅读第一篇文章,建议您首先阅读以下内 ...
- java 性能调优_Java性能调优调查结果(第三部分)
java 性能调优 这是本系列文章的第三篇,我们将分析2014年10月进行的调查的结果.如果您尚未这样做,我建议从本系列的前两篇文章开始: 问题严重性分析和监视域分析 . 这篇文章着重于故障排除/根本 ...
最新文章
- LeetCode简单题之将找到的值乘以2
- 2.4.1 死锁的概念
- php中cookie的工作原理,cookie工作原理_PHP教程
- 韶关无线电厂台式计算机,中国芯片30年的历史 它背后有哪些不为人知的故事?...
- 38动感菜单 38 jQuery And CSS Drop Down Multi Level Menu Solutions
- linux文件删除恢复
- 【kafka】scalac compiled against an incompatible version of joptsimple
- 网管员、工程师 、专家 的岗位描述
- php中的加密解密模块-mcrypt
- 企业微信hook,企业微信软件
- 学习类APP如何规范
- android dff播放器,无损音乐解码播放器
- 传感器实验——LCD显示SHT20
- C++ MFC 如何画一个空心的即透明填充色的图形如矩形,圆形等
- PHPNow 本地服务器安装
- 反相器有时候为了强调低电平有效,将反相器的图形符号中的小圆圈画在输入端,如数电中的画法。有时候小圆圈在前面只表示低电平有效,没有反相的意思,例如与非门组成的RS触发器
- Unity 3D 接入 移动MM (3.1.3)计费SDK
- sql中exist与in 的区别
- 计算机一级常用计算公式,软考网络工程师常用计算公式汇总1
- 小白UEFI启动如何设置
热门文章
- [Spring Framework]学习笔记--Dependency injection(DI)
- C#如何判断质数(转)
- [未解决]jQuery中autocomplete的source格式问题
- editorloop 占用_systemd CPU占用100%,并出现大量僵尸进程
- linuxpython重定向_linux命令重定向、、 1、 2、 1、 2、
- win10浏览器_Win10系统中ie浏览器的证书错误应该如何解决?
- java控制器接收请求参数_SpringMVC之接收请求参数和页面传参
- php 状态模式,PHP设计模式(十九)—状态模式 (State Pattern)
- python面对对象汉诺塔_如何使用python实现的汉诺塔的小程序
- 计算机无法用telnet,为何我的电脑cmd没法使用telnet命令?