當前位置:
首頁 > 最新 > 全棧虛擬機GraalVM初體驗

全棧虛擬機GraalVM初體驗

官方介紹

近日Oracle開源了一個實驗性的產品GraalVM,官方稱之為Universal GraalVM。它打通了不同語言之間的鴻溝,讓我們可以進行混合式多語言編程。

在GraalVM之上,我們可以編寫Java、Python、Ruby、R、Scala、Kotlin,甚至是C、C++語言。

你可能會當心不同語言之間的互操作會不會帶來性能上的問題。GraalVM說不會,你可以隨意在多種不同語言之間竄來竄去,性能都不是問題。它完全不同於JVM裡面的JRuby、Jython這些library。

看到這裡,你須明白,GraalVM可能不止是一個玩具,它能真得跑起來大型應用。

圖中的例子同時用了NodeJS、Java和R語言,拿node平台的express框架跑起了一個簡單的web伺服器。

GraalVM支持鏡像加速,類似於Android的Ahead-Of-Time編譯,將程序編譯為原生的二進位程序,加速程序啟動過程。

我們看到這性能至少提速了一個數量級。Spring啟動蝸牛慢的問題有可能首先被GraalVM解決。

GraalVM可以內置到不同的運行環境。目前已經可以內置到Node、Java、Oracle和MySQL這幾個產品中。

下載安裝

接下來我們親自體驗一下GraalVM的神奇魅力。

首先進入下載頁面,OMG,竟然同時提供了社區版和企業版,看來GraalVM真不止是個玩具。

糟糕,社區版目前不支持mac,還得在龜慢的github上下載。

企業版支持mac,還好,可以試用,但是下載要註冊Oracle賬號,國外的網站訪問真是龜慢。耐心!耐心!耐心!

填寫了一番冗長的註冊表單後,總算可以下載了,又是龜速啊。

改用迅雷,迅雷快,也就快了一小會,迅速從500k/s降低到50k/s,又回到了100k/s。還是喝杯咖啡先。

總算下完了,大概花了1個小時。

圖中的紫色命令是GraalVM提供的比較特殊的命令

js 運行在GraalVM之上的javascript命令行

node 跟普通的node一樣,區別是運行在GraalVM之上

java 跟普通的java一樣,區別是運行在GraalVM之上

lli 運行在GraalVM之上的llvm位元組碼執行器,C和C++代碼會編譯成llvm位元組碼,然後通過它來運行

native-image 預編譯程序文件生成快速二進位文件,用於加速啟動程序

gu 其它的語言像Python、Ruby和R的支持都是通過gu進行安裝的

因為小編此時無法翻牆,所以只好放棄ruby和python的安裝了。

版本信息

可以看到這些命令的版本信息里除了node之外都攜帶了Graal單詞。

運行

使用native-image進行預編譯之後會生成一個二進位文件,然後對比前後運行時間發現預編譯前後執行性能明顯提升。native-image耗時較長,因為要做大量的代碼靜態分析,大約耗時1分鐘。

C語言需要先編譯成llvm的位元組碼程序hello.bc,然後才能讓lli命令執行。

javascript解釋器,全局對象console、Math、Date都有了。

不可思議,npm可以直接安裝第三方包,使用GraalVM提供的node能正常運行。npm也是GraalVM內置的程序。

解決了哪些痛點

GraalVM的混合式多語言編程可以解決開發者的以下常見問題

那個庫我這個語言沒有,我TM得自己擼一個

那個語言最適合解決我這個問題,但是我這個環境下跑不起來

這個問題已經被我的語言解決了,但是我的語言跑起來太慢了

通過使用Polyglot API,GraalVM要給開發者帶來真正的語言級自由。

Polyglot工作原理

GraalVM提供了一種在不同語言之間可以無縫傳值的方法,而不需要像其它虛擬機一樣進行序列化和反序列化。這樣就保證了跨語言也能繼續保持高性能。

GraalVM開發了「跨語言互操作協議」,它是一種特殊的介面協議,每種運行在GraalVM之上的語言都要實現這種協議,這樣就能保證跨語言的互操作性。

語言和語言之間無須了解對方就可以高效傳值。該協議還在不斷改進中,未來會支持更多特性。

弱化主語言

GraalVM開發了一個實驗性的啟動器「polyglot」。在polyglot裡面不存在主語言的概念,每種語言都是平等的,可以使用polyglot運行任意語言編寫的程序,而不需要前面的每種語言單獨一個啟動器。polyglot會通過文件的擴展名來自動分類語言。

Shell

GraalVM還開發了一個動態語言的Shell,該Shell默認使用js語言,可以使用命令切換到任意其它語言進行解釋操作。

最後

不幸的是,GraalVM是Oracle的產品,它要是能像Google這樣節操多點,GraalVM也許會是一個非常完美的產品。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 碼洞 的精彩文章:

HTTP協議冷知識大全
鮮為人知的HTTP協議頭欄位詳解大全

TAG:碼洞 |