原創(chuàng) | 你知道什么是Graal VM嗎?全棧虛擬機?猛!

作者 | ithuangqing
來源 | 慶哥Java(ID:ithuangqing)
世界上最好的語言是java,不服來戰(zhàn)!??
Java說,總有人想害朕
聽說啊,在程序員中一直有這樣的一個鄙視鏈:C 語言工程師鄙視 C++ 工程師,C++ 工程師鄙視 Java 和 C# 工程師,Java 工程師和 C# 工程師則互相鄙視,所有的工程師都鄙視PHP工程師。
哈哈,PHP的各位是不是尷了個大尬了??,沒事,反正“PHP是世界上最好的語言”
我們先來看看這個:

嗯嗯,Java還是第一,哈哈,不過作為天下第一的Java,總避免不了被挑戰(zhàn),而且最近聽到越來越多類似“xx語言有望取代java,有望登頂”的言論,比如說Python啊,對不對,畢竟Python真的有點猛啊,而且最近還聽說Go,反正這個XX可能是任何一門編程語言,畢竟誰都想做老大啊!??
不過作為常年霸榜的java可不是你說想取代就取代的,而且java還有不少猛料,天下第一豈是你能撼動的!??
java哪來的自信
作為一名java愛好者,我就非常自信的說,java可不是你想動就動的了的,再說了,java好像也從不懼怕被任何一門語言所取代,畢竟人家是“實力派”,可不是那些所謂的“流量小生”
我們知道java語言本身有很多的優(yōu)點,當然啦,這些優(yōu)點可能其他語言也有,甚至其他語言還有一些特色是java語言所沒有的,其實啊,java也不在乎這些,因為對于java來說,人家除了優(yōu)秀的語言本身之外,還有非?;钴S和龐大的生態(tài),這個是真的猛。
說個最直接的例子,你就看吧,培訓機構可以沒有Android或者其他,但是一定會有java,那些在線教程網站,一定會有java的課程,而且還偏多,你要是想在網上找個學習資源,你可以對比一下,java相關的資源是真的多。
所以啊,簡而言之,java人家這猛的一批的生態(tài),不是其他語言說取代就取代的,所以想學編程的,java一定是個不錯的選擇,另外在學習java的,好好學習吧,前景必須可以滴!
當然,科技在進步,社會在發(fā)展,很多語言都在不斷的迭代,變得越來越猛,很多優(yōu)秀的功能特性不斷發(fā)布,作為天下第一的java必須不能落后啊,可能你只知道自己現在還在用JDK7或者8嘞,可人家已經13了,但是,java的猛料可不止這些。
來,跟著慶哥一起漲姿勢吧!??
黑科技:Graal VM
第一看到,這啥啊,VM不就是虛擬機嗎?那這個?可以的,你知道了那么一丟丟!
Graal VM這是啥玩意
Graal VM可是個好東西,它是Oracle Labs在2018年4月的時候對外公開的一個黑科技,了解了之后,驚呆了,這玩意真猛!
可能有人對Oracle Labs不太了解:
Oracle Labs的任務很簡單:識別,探索和轉讓具有極大改善Oracle業(yè)務潛力的新技術。
可以去官網看看:Oracle Labs
給你先截個圖吧,你瞅瞅:

GraalVM是Java虛擬機的新運行時,它為多種語言(包括Java,JavaScript和Ruby)提供了高性能的執(zhí)行環(huán)境
大眼一看,有點猛(懵??),我們都知道java非常經典的一句名言吧:
Write Once,Run Anywhere
學習java的都知道咋回事,java強大的跨平臺特性,就是依賴JVM,也就是java虛擬機來實現的,這句標志性口號可是1995年java誕生時就提出來的,這是java的一大特點,實現了跨平臺。(公眾號:編碼之外,后續(xù)會出java虛擬機系列原創(chuàng)教程,保證通俗易懂)
Run Programs Faster Anywhere
而這個Graal VM也提出來了一個口號:
Run Programs Faster Anywhere
用我蹩腳的英語給大家翻譯一下就是:以更快的速度運行程序
怎么樣,有沒有一種和 Write Once,Run Anywhere 惺惺相惜,互相愛護的趕腳??
如果你學習過java虛擬機的話應該知道,我們現在普遍談論的JVM一般是指的HotSpot,為啥,人家牛,所以流行唄,而這個Graal VM其實就是在HotSpot的基礎上擴展而來的,既然是擴展,那擴展后肯定比原來的牛X啊,我們知道HotSpot只是針對java語言實現跨平臺的虛擬機,也就是專門為java服務的。
而Graal VM經過一擴展之后可不得了,人家不滿足于只服務于java了,人家現在可是要做 全棧虛擬機 啊,啥是全棧知道吧,就是你啥都要會,前后端一起搞??,所以這幾個全棧虛擬機也就好理解了,人家的目標是要為絕大部分流行的語言服務,不單單是java自己了。
JVM那些事
在此之前,我們知道,像java,Scala,Groovy和Kotlin都是可以運行在java虛擬機之上的,啥意思,也就是這么個意思:

也就是說,這些代碼可以生成統(tǒng)一的中間代碼,即是字節(jié)碼文件,然后可以統(tǒng)一運行在JVM上,再來看針對java而言是如何實現跨平臺的:

再來深層次的看看與操作系統(tǒng)的交互:

這里加入了沒有虛擬機支持的C/C++,明白了這個,再來看Graal VM這個全棧虛擬機,這下知道了它的野心了吧!
你HotSpot只是為java體系這些語言服務,統(tǒng)一生成字節(jié)碼文件來運行,但是咱就不同,你支持的我支持的更好,你不支持的我也支持,比如像C/C++、JS、Python和R語言等,咱都支持。
Graal VM的基本工作原理是啥
想一下,根據java虛擬機的原理,可以猜想一下Graal VM的基本工作原理,我們知道無論是java還是Kotlin都需要經過編譯后生成字節(jié)碼文件交給jvm來運行,也就是說對于jvm,它是與字節(jié)碼打交道的,所以啊,字節(jié)碼文件相當于一個中間表示,那對于Graal VM是不是也一樣,要想實現對更多的語言的支持,那就需要把這些語言,比如JS,需要把它編譯后的特定格式代碼或者直接源代碼通過一種特定的解釋器轉換成Graal VM可以認識的中間代碼,就比如jvm中的字節(jié)碼文件一樣。
不過在Graal VM中可以定的是它的中間代碼不再是字節(jié)碼文件了。當然,Graal VM本身就是在HotSpot之上發(fā)展而來,所以完全可以作為一個java虛擬機來使用,
那么,可能有人有疑問了,那作為java虛擬機來說,有什么區(qū)別呢,他們倆啊,主要的區(qū)別就是在即時編譯技術上,另外啊,針對Oracle Labs目前最新的即時編譯技術的研究可都是遷移在Graal VM來進行的哦。
所以啊,Graal VM不可忽視啊,很猛的一個家伙??!
Graal 編譯器
Graal 編譯器又是啥
看到這個名字就知道這家伙和上面說的Graal VM有關系啊,是的,這個Graal編譯器就是來自Graal VM,它是從jdk10開始,在HotSpot中加入的一個全新的即時編譯器。
這是干啥的啊,我們知道,我們編寫的應用,有的時候需要長時間有運行,另外,你一定聽說過熱點代碼,對于那些需要長時間運行的代碼而言,經過一定的預熱,熱點代碼就會被HotSpot中的探測機(目前知道這么一回事即可)捕獲到,然后這些熱點代碼就會被編譯成硬件可以直接執(zhí)行的機器碼,那么這樣的應用,他們的效率主要就是看即時編譯器輸出的代碼質量了。
HotSpot有哪些即時編譯器
目前啊,對于HotSpot虛擬機來說,它的里面有兩個主要的即時編譯器,簡稱C1和C2:
C1:編譯耗時短,但是輸出的代碼優(yōu)化程度有點低
C2:編譯耗時長,相對的,輸出的代碼優(yōu)化就好點
那么這個新的Graal 編譯器自然就要集眾家之長了,Graal 編譯器其實是用來代替C2編譯器的,Graal 編譯器實際情況是輸出代碼的質量保持和C2的一致,另外在開發(fā)效率和擴展性上都要強于C2,當然,它的編譯時長也得到了很大優(yōu)化。
既生瑜何生亮
其實C2也很優(yōu)秀,但是由于C2時間有點長,代碼真的太復雜了,擴展起來有點難,畢竟沒有完美的,需要不斷的優(yōu)化迭代,但是過于復雜的C2維護起來著實有點困難,所以必須搞個替代品,這個替代品必須總體設計上和C2接近,并且擴展性強,這樣就可以把C2優(yōu)秀的特性給移植過來,除此之外,可以增加更多優(yōu)化和新的特性,但是如果想要在原有的C2上進行優(yōu)化和新增那就有點困難了。
所以Graal 編譯器就來了!值得一說的,Graal 編譯器的效率已經追上了老牌C2,而且有些方面比C2還要強!
不過嘞,Graal 編譯器還是有點年輕,多以啊,它還是個實驗狀態(tài),因此要想使用它,需要使用開關激活,也就是需要指定參數來開啟它,不然默認是不會使用Graal 編譯器的。
總的來說啊,Graal 編譯器很有潛力啊,相信未來一定會作為主要的即時編譯器來使用,這樣的話就會使用HotSpot和Graal VM更牛X了。
好文章,我在看??
