日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

這是我最近一直在思索的一個問題。

去年8月份的the Oracle Groundbreakers Tour 2020 LATAM大會上,Mark Nelson和Peter Nagy就對此做過一系列基礎的的測試用以比較。接下來就給大家介紹下。

在程序員圈子里,普遍的看法是JAVA 老、慢、無聊 ,而Go是 快、新、酷

為了盡可能地進行一個相對公平的測試,他們使用了一個非常簡單的微服務,沒有外部依賴關系(比如數據庫),代碼路徑非常短(只是操縱字符串),使用了小型的、輕量級的框架(Helidon for Java和Go工具包for Go),試驗了不同版本的Java和不同的jvm。

對決雙雄

我們先來看下擂臺兩邊的選手:

  • 身穿深色戰服的選手是 JAVA

Java是由被甲骨文收購的Sun Microsystems開發的。它的1.0版本是1996年發布的,最新的版本是2020年的Java15。主要的設計目標是Java虛擬機和字節碼的可移植性,以及帶有垃圾收集的內存管理。它是全世界最流行的語言之一,在開源環境下開發。

我們先看下JAVA的問題,大家普遍認為它最大的問題就是速度慢,已經慢到讓人覺得不再是合理的,而是更具歷史意義的。不過這么多年來,Java誕生了很多不同的垃圾收集算法用來加快它運行的速度。

Oracle實驗室最近已經開發了一個新的Java虛擬機GraalVM,它有一個新的編譯器和一些令人興奮的新特性,比如能夠將Java字節碼轉換成一個本機映像,可以在沒有javavm的情況下運行等。

  • 而它的對手就是年輕充滿活力的 GO

GO是由谷歌的羅伯特·格里默、羅伯·派克和肯·湯姆森創建的。他們對UNIX、B、C、Plan9、UNIX窗口系統等做出了重大貢獻。GO是開源的,在2012年發布了1.0版本(比JAVA晚了16年),在2020年發布了1.15版本。無論是在采用方面,還是在語言和工具生態系統本身方面,它都在快速增長。

GO受C、Python、JavaScript和C++等多種語言的影響。被設計成高性能網絡和多處理的最佳語言。

StackOverflow有27872個帶“Go”的問題,而Java只有1702730個。足見長江后浪推前浪。

Go是一種靜態類型的編譯語言。它又稱為goroutines的輕量級進程(這些不是OS線程),它們之間有獨特的通信通道(類型化的,FIFO)。Go是許多CNCF項目的首選語言,例如Kubernetes、Istio、Prometheus和Grafana

賽前對比

從個人感覺來說,Go相比JAVA來說,優點在于:

Go更容易實現復合、純函數、不變狀態等功能模式。

Go處于生命周期的早期,因此它沒有向后兼容性的沉重負擔—Go仍然可以輕易打破某些限制來改進。

Go編譯成一個本機靜態鏈接的二進制文件-沒有虛擬機層-二進制文件擁有運行程序所需的一切,這對于“從頭開始”的容器來說非常好。

Go體積小、啟動快、執行快(目前是的)

Go沒有OOP,繼承,泛型,斷言,指針算法

Go寫法上較少的括號

Go沒有循環依賴、沒有未使用的變量或導入、沒有隱式類型轉換的強制

Go樣板代碼少得多

缺點是:

Go工具生態系統還不成熟,尤其是依賴關系管理——有幾個選項,沒有一個是完美的,特別是對于非開源開發;仍然存在兼容性挑戰。

構建具有新的/更新的依賴項的代碼非常慢(比如Maven著名的“下載Internet”問題)

導入將代碼綁定到存儲庫,這使得在存儲庫中移動代碼成為一場噩夢。

調試、評測等仍然是一個挑戰

用到了指針

需要實現一些基本的算法

沒有動態鏈接

沒有太多旋鈕來調優執行或垃圾收集、概要文件執行或優化算法。

比賽開始

使用JMeter來運行負載測試。這些測試多次調用這些服務,并收集有關響應時間、吞吐量(每秒事務數)和內存使用情況的數據。對于Go,收集駐留集大小;對于Java,跟蹤本機內存。

在測量之前,使用1000次服務調用對應用程序進行預熱。

應用程序本身的源代碼以及負載測試的定義都在這個GitHub存儲庫中: https://github.com/markxnelson/go-java-go

第一回合

在第一輪測試中,在一臺“小型”機器上進行了測試,是一臺2.5GHz雙核Intel core i7筆記本電腦,16GB內存運行macOS。測試運行了100個線程,每個線程有10000個循環,上升時間為10秒。Java應用程序運行在JDK11和Helidon2.0.1上。使用Go 1.13.3編譯的Go應用程序。

結果如下:

Java微服務 vs Go微服務,究竟誰更強?

 


Java微服務 vs Go微服務,究竟誰更強?

 

可以看出,第一回合是Go贏了!

JAVA占的內存太多了;預熱對JVM有很大的影響—我們知道JVM在運行時會進行優化,所以這是有意義的

在第一回合的基礎上,意猶未盡的又引入GraalVM映像以使 Java 應用程序的執行環境更接近于 Go 應用程序的環境,添加了 GraalVM 映像測試(用 GraalVM EE 20.1.1ー JDK 11構建的本機映像)的結果是:

Java微服務 vs Go微服務,究竟誰更強?

 


Java微服務 vs Go微服務,究竟誰更強?

 

通過使用 GraalVM 映像在 JVM 上運行應用程序,我們沒有看到吞吐量或響應時間方面的任何實質性改進,但是內存占用的確變小了。

下面是一些測試的響應時間圖:

Java微服務 vs Go微服務,究竟誰更強?

 

第二回合

在第二輪測試中,使用一臺更大的機器上運行測試。36核(每個核兩個線程)、256GB內存、運行oraclelinux7.8的機器。

和第一輪類似,使用了100個線程,每個線程使用了10,000個循環,10秒的加速時間,以及相同版本的 Go,Java,Helidon 和 GraalVM。

結果如下:

Java微服務 vs Go微服務,究竟誰更強?

 

這一回合是GraalVM 映像贏了!

下面是一些測試的響應時間圖:

Java微服務 vs Go微服務,究竟誰更強?

 


Java微服務 vs Go微服務,究竟誰更強?

 


Java微服務 vs Go微服務,究竟誰更強?

 

在這個測試中,Java變體的表現要好得多,并且在沒有使用Java日志記錄的情況下,它的性能大大超過了Go。Java似乎更能使用硬件提供的多核和執行線程(與Go相比)。

這一輪的最佳表現來自GraalVM native image,平均響應時間為0.25毫秒,每秒事務數為82426個,而Go的最佳結果為1.59毫秒和39227個tps,然而這是以多占用兩個數量級的內存為代價的!

GraalVM映像比在jvm上運行的同一應用程序快大約30–40%!

第三回合

這次,比賽在Kubernetes集群中運行這些應用程序,這是一個更自然的微服務運行時環境。

這次使用了一個Kubernetes 1.16.8集群,它有三個工作節點,每個節點有兩個內核(每個內核有兩個執行線程)、14GB的RAM和oraclelinux7.8。

應用程序訪問是通過Traefik入口控制器進行的,JMeter在Kubernetes集群外運行,用于一些測試,而對于其他測試,使用ClusterIP并在集群中運行JMeter。

與前面的測試一樣,我們使用了100個線程,每個線程使用了10,000個循環,以及10秒的加速時間。

下面是各種不同容器的大小:

Go 11.6MB 11.6 MB

Java/Helidon 1.41GB 1.41 GB

Java/Helidon JLinked 150MB 150mb

Native image 25.2MB 25.2 MB

結果如下:

Java微服務 vs Go微服務,究竟誰更強?

 

下面是一些測試的響應時間圖:

Java微服務 vs Go微服務,究竟誰更強?

 

在這一輪中,我們觀察到 Go 有時更快,GraalVM 映像有時更快,但這兩者之間的差別很小(通常小于5%)。

Java似乎比Go更善于使用所有可用的內核/線程—我們在Java測試中看到了更好的CPU利用率。Java性能在擁有更多內核和內存的機器上更好,Go性能在較小/功能較弱的機器上更好。在一臺“生產規模”的機器上,Java很容易就和Go一樣快,或者更快

分享到:
標簽:微服
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定