rust go java 性能_Java,Go和Rust之间的比较 - Dexter
這是Java,Go和Rust之間的比較。這不是基準(zhǔn)測(cè)試,而是關(guān)于:可執(zhí)行文件大小、內(nèi)存使用、CPU使用率、運(yùn)行時(shí)要求之間的比較,當(dāng)然還有一個(gè)小的基準(zhǔn)測(cè)試,可以每秒獲取一些請(qǐng)求。
測(cè)試三個(gè)Web服務(wù)的存儲(chǔ)庫(kù)托管在github上。直接看結(jié)論:
結(jié)論
在得出任何結(jié)論之前,我想指出這三種語(yǔ)言之間的關(guān)系(或缺乏)。Java和Go都是垃圾收集語(yǔ)言,但是Java會(huì)提前編譯為在JVM上運(yùn)行的字節(jié)碼。啟動(dòng)Java應(yīng)用程序時(shí),將隨時(shí)隨地(JIT)編譯器調(diào)用,以通過(guò)將字節(jié)碼編譯為本地代碼來(lái)優(yōu)化字節(jié)碼,以提高應(yīng)用程序的性能。
Go和Rust都提前編譯為本地代碼,并且在運(yùn)行時(shí)不會(huì)進(jìn)行進(jìn)一步的優(yōu)化。
Java和Go都是垃圾收集語(yǔ)言,具有暫停應(yīng)用導(dǎo)致類(lèi)似世界末日的副作用。這意味著,每當(dāng)垃圾收集器運(yùn)行時(shí),它將停止應(yīng)用程序,進(jìn)行垃圾收集,并在完成后從停止的地方恢復(fù)應(yīng)用程序。大多數(shù)垃圾收集器需要停止運(yùn)行,但是有些實(shí)現(xiàn)似乎不需要這樣做。
當(dāng)Java語(yǔ)言在90年代創(chuàng)建時(shí),其最大的賣(mài)點(diǎn)之一是一次編寫(xiě),可在任何地方運(yùn)行。當(dāng)時(shí)這非常好,因?yàn)槭袌?chǎng)上沒(méi)有很多虛擬化解決方案。如今,大多數(shù)CPU支持虛擬化,這種虛擬化僅在代碼可以在任何地方(無(wú)論如何在任何受支持的平臺(tái)上運(yùn)行)的前提下,才停止使用某種語(yǔ)言進(jìn)行開(kāi)發(fā)的誘惑。Docker和其他解決方案以便宜的價(jià)格提供虛擬化。
在整個(gè)測(cè)試中,應(yīng)用程序的Java版本比Go或Rust對(duì)應(yīng)版本消耗了更多的內(nèi)存,在前兩個(gè)測(cè)試中,Java使用的內(nèi)存大約增加了8000%。這意味著對(duì)于實(shí)際應(yīng)用程序,Java應(yīng)用程序的運(yùn)行成本會(huì)更高。
對(duì)于前兩個(gè)測(cè)試,Go應(yīng)用程序使用的CPU比Java少20%,同時(shí)處理38%的請(qǐng)求。另一方面,Rust版本使用的CPU比Go減少了57%,而處理的請(qǐng)求卻增加了13%。
第三次測(cè)試在設(shè)計(jì)上是占用大量CPU的資源,因此我想從中擠出CPU的每一分。Go和Rust都比Java使用了1%的CPU。而且我認(rèn)為,如果wrk不是在同一臺(tái)計(jì)算機(jī)上運(yùn)行,??那么這三個(gè)版本都會(huì)使CPU的上限為100%。在內(nèi)存方面,Java使用的內(nèi)存比Go和Rust多2000%。Java可以處理的請(qǐng)求比Go多出20%,而Rust可以處理的請(qǐng)求比Java多出15%。
在撰寫(xiě)本文時(shí),Java編程語(yǔ)言已經(jīng)存在了將近30年,這使得在市場(chǎng)上尋找Java開(kāi)發(fā)人員變得相對(duì)容易。另一方面,Go和Rust都是相對(duì)較新的語(yǔ)言,因此與Java相比,自然而然的數(shù)量或更少的開(kāi)發(fā)人員。不過(guò),Go和Rust都獲得了很大的吸引力,許多開(kāi)發(fā)人員正在將它們用于新項(xiàng)目,并且有許多使用Go和Rust的生產(chǎn)中正在運(yùn)行的項(xiàng)目,因?yàn)楹?jiǎn)單地說(shuō),就資源而言,它們比Java更有效。(也許是因?yàn)樗鼈兪墙稚系男驴嵴Z(yǔ)言!)
在編寫(xiě)本文的程序時(shí),我同時(shí)學(xué)習(xí)了Go和Rust。就我而言,Go的學(xué)習(xí)曲線很短,因?yàn)樗且环N相對(duì)容易掌握的語(yǔ)言,并且與其他語(yǔ)言相比語(yǔ)法很小。我只用了幾天就用Go編寫(xiě)了程序。關(guān)于Go需要注意的一件事是編譯速度,我不得不承認(rèn),與Java / C / C ++ / Rust等其他語(yǔ)言相比,它的速度非???。該程序的Rust版本花了我大約一個(gè)星期的時(shí)間來(lái)完成,Rust具有嚴(yán)格的所有權(quán)規(guī)則,但是一旦掌握了Rust的所有權(quán)和借用概念,編譯器錯(cuò)誤消息就會(huì)突然變得更加有意義。違反借閱檢查規(guī)則時(shí)Rust編譯器對(duì)您大吼的原因,這是因?yàn)榫幾g器希望在編譯時(shí)證明已分配內(nèi)存的壽命和所有權(quán)。這樣做可以保證程序的安全性(例如:沒(méi)有懸掛的指針,除非使用了不安全的代碼轉(zhuǎn)義),并且在編譯時(shí)確定了釋放位置,從而消除了垃圾收集器的需求和運(yùn)行時(shí)成本。當(dāng)然,這是以學(xué)習(xí)Rust的所有權(quán)系統(tǒng)為代價(jià)的。
在競(jìng)爭(zhēng)方面,我認(rèn)為Go是Java(通常是JVM語(yǔ)言)的直接競(jìng)爭(zhēng)對(duì)手,但不是Rust的競(jìng)爭(zhēng)對(duì)手。另一方面,Rust是Java,Go,C和C ++的重要競(jìng)爭(zhēng)對(duì)手。
Rust比Go具有根本優(yōu)勢(shì)。它不是垃圾收集的語(yǔ)言,與C和C ++相比,它可以安全地編寫(xiě)代碼。例如,Go并不是特別適合用于編寫(xiě)OS內(nèi)核,而這里又是Rust的亮點(diǎn),并與C / C ++競(jìng)爭(zhēng),因?yàn)樗鼈兪鞘褂肙S編寫(xiě)的長(zhǎng)期存在和事實(shí)上的語(yǔ)言。Rust與C競(jìng)爭(zhēng)的另一種方式/ C ++在嵌入式世界中。
總結(jié)
以上是生活随笔為你收集整理的rust go java 性能_Java,Go和Rust之间的比较 - Dexter的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: gearman php mysql_ph
- 下一篇: java出现errors是什么错误_ja