前不久我參加了一個國外程式員的講座,講座的副標題很有趣,叫做“我如何學會停止恐懼,並且愛上Java虛擬機器”。
這句話來自一部黑色幽默電影《奇愛博士》,電影描述了冷戰時期劍拔弩張的氛圍。程式員之間的語言之爭又未嘗不是如此。寫系統語言的鄙視託管語言那低下的執行效率;寫託管語言的則取笑系統語言需要手動管理記憶體;寫動態語言的不屑於靜態語言那冗餘的型別系統;寫靜態語言的則嘲諷動態語言裡邊各種光怪陸離的執行時錯誤。
Java作為應用最廣的語言,自然吸引了不少的攻擊,而身為Java程式員的你,或許在口水戰中落了下風,忿忿於沒有足夠的知識武裝自己;又或許想要深入學習Java語言,卻又無從下手。甚至是在實踐中被Java的啟動效能、記憶體耗費所震驚,因此對Java語言本身產生了種種的懷疑與顧慮。
不過別擔心,學習Java虛擬機器,就可以解答你對Java的種種疑慮,做到“知其所以然”——瞭解Java程式是如何被執行且最佳化的。這樣一來,你才可以從內部入手,達到高效程式設計的目的。與此同時,你也可以為學習更深層級、更為核心的Java技術打好基礎。
如果我們把核心類庫的API比做數學公式的話,那麼Java虛擬機器的知識就好比公式的推導過程。掌握數學公式固然可以應付考試,但是瞭解背後的推導過程更加有助於記憶和理解。並且,在遇到那些沒法套公式的情況下,我們也能知道如何解決。
在我7年的學習工作生涯中,我拜讀過許多大神關於Java虛擬機器的技術部落格,在受益匪淺的同時,我發覺不少文章的門檻都比較高,而且過分註重實現細節,這並不是大多數的開發人員可以受益的調優方案。這麼一來,許多原本對Java虛擬機器感興趣的同學, 也因為過高的門檻,以及短時間內看不到的收益,而放棄了對Java虛擬機器的學習。
這是我非常不想看到的。在收到極客時間的邀請後,我決定挑戰一下Java虛擬機器的科普工作,於是有了這個專欄:《深入拆解Java虛擬機器》。在這個專欄裡,我會用簡單通俗的語言,來介紹Java虛擬機器的實現。具體到每篇文章,我將採用一個貫穿全文的案例來闡述知識點,並且給出相應的分析建議。在文章的末尾,我還將附上一個動手實踐的環節,幫助你鞏固對知識點的理解。
我是誰?
我是鄭雨迪,是甲骨文實驗室(Oracle Labs)的高階研究員,主要負責研究如何透過程式分析技術以及動態編譯技術讓程式語言跑得更快。我是全棧虛擬機器Graal編譯器的核心開發者之一,也在為HotSpot虛擬機器專案添磚加瓦。
這裡順便說明一下,Graal編譯器是Java 10正式引入的實驗性即時編譯器,在國內同行口中被稱為“甲骨文黑科技”。其實,我們的工作同樣也是分析應用程式的效能瓶頸,尋找最佳化空間,只不過我們的最佳化方式對自動化、通用性有更高的要求。因此,我來講Java虛擬機器,可以為你提供一些深入的、獨特的視角,讓你更能洞察Java虛擬機器的核心。
加入甲骨文之前,我在瑞士盧加諾大學攻讀博士學位,研究如何更加精準地監控Java程式,以便做出更具針對性的最佳化。比如,我研究過JVM監控工具的“observer effect”,並提出一套針對動態編譯的解決方案。這些研究工作均已發表在程式語言方向的頂級會議上,並獲得了不少同行的認可。
課程介紹
我的整個專欄將分為四大模組。
-
基本原理:剖析Java虛擬機器的執行機制,逐一介紹Java虛擬機器的設計決策以及工程實現;
-
高效實現:探索Java編譯器,以及內嵌於Java虛擬機器中的即時編譯器,幫助你更好地理解Java語言特性,繼而寫出簡潔高效的程式碼;
-
程式碼最佳化:介紹如何利用工具定位並解決程式碼中的問題,以及在已有工具不適用的情況下,如何打造專屬輪子;
-
虛擬機器黑科技:介紹甲骨文實驗室近年來的前沿工作之一GraalVM。包括如何在JVM上高效執行其他語言;如何混搭這些語言,實現Polyglot;如何將這些語言事前編譯(Ahead-Of-Time,AOT)成機器指令,單獨執行甚至嵌入至資料庫中執行。
訂閱福利
福利一:限時優惠價¥45,原價¥68,7 月 28 日恢複原價
福利二:每邀請一位好友購買,你可獲得 18 元現金返現,多邀多得,上不封頂,立即提現(提現流程:極客時間 App – 我的 – 分享有賞)