[Java學習探討]爲何學Java虛擬機的Java程序員更值錢?
曾經的我常常懼怕處理與JVM相關的異常,對JVM的配置參數也一無所知,那時候我天真地認爲,JVM的出現自己就是想讓程序員屏蔽實現細節,做爲一名普通的開發,咱們徹底沒有必要了解內在構造,只要記住一些簡單的規則足矣。
隨着工做的深刻,我開始接觸到JVM的實現原理,得心應手以後,我發現本身看到了一片更爲廣闊的天地。簡而言之,當我再遇到問題時,我也可以更加快速和系統地思考問題的性質,並快速作出判斷。同時,學習新的編程語言時,我也能夠從「同理心」的角度思考爲何做者要這樣設計,他的用意何在。基於這些思考和分析,我也可以快速看到事情的本質,跑得更快,走得更遠。
因此,做爲一名Java程序員,在盡情享受Java虛擬機帶來好處的同時,你還應該去了解和思考「這些技術特性是如何實現的」,去了解最底層的原理。只有熟悉JVM,你才能在遇到OutOfMemory等異常時,不會一籌莫展,不會一臉懵逼的上網找解決辦法,最後就算改了幾個啓動參數解決了問題,也仍是雲裏霧裏。html
「爲何學Java虛擬機」這個問題,就和「爲何要學習數據結構和算法」是一個道理:工欲善其事,必先利其器。能夠說,Java虛擬機就是每一位Java工程師進階加薪的利器,你想往上升,你想深刻技術,不想一直停留在簡單開發,或者你在作Java性能分析、調優工做時,那麼,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)成機器指令,單獨運行甚至嵌入至數據庫中運行。程序員