成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

從表到里學(xué)習(xí)JVM實(shí)現(xiàn)

Cristic / 1519人閱讀

在社會化分工、軟件行業(yè)細(xì)分專業(yè)化的趨勢下,會真的參與到底層系統(tǒng)實(shí)現(xiàn)的人肯定是越來越少(比例上說)。真的會參與到JVM實(shí)現(xiàn)的人肯定是少數(shù)。

但如果您對JVM是如何實(shí)現(xiàn)的有興趣、充滿好奇,卻苦于沒有足夠系統(tǒng)的知識去深入,那么可以參考RednaxelaFX整理的這個書單。

本豆列的脈絡(luò)是:
  

1. JVM與Java語言規(guī)范

  
要了解JVM是如何實(shí)現(xiàn)的,首先必須要知道JVM到底是什么、不是什么,表面上應(yīng)該提供怎樣的功能。為此,JVM規(guī)范必讀,而且應(yīng)該時常放在手邊參考。

而JVM的主要服務(wù)對象是Java編程語言。雖然JVM也可以支持眾多其它語言,但JVM里的“J”仍然最重要,Java的語言特性影響了JVM的原始設(shè)計(jì),所以Java語言規(guī)范也應(yīng)該閱讀。特別是,JVM關(guān)于線程和同步相關(guān)的規(guī)定都是交由Java語言規(guī)范的相關(guān)章節(jié)定義的。
  

2. 虛擬機(jī)概論

  
這里選取《Virtual Machines: Versatile Platforms for Systems and Processes》,幫助您了解“虛擬機(jī)”一詞到底指代什么,有什么不同類型,大概有哪些實(shí)現(xiàn)方法,等等。讀完這本書有助獲得一個清晰的大局觀。
  

3. 為Java程序員從用戶的角度介紹JVM的使用經(jīng)驗(yàn)的幾本書

  
雖然這幾本并沒有深入到JVM實(shí)現(xiàn)的非常細(xì)節(jié)的角落,但對已經(jīng)習(xí)慣用Java語言編程的程序員來說,有這么幾本書帶領(lǐng)自己從熟悉的領(lǐng)域進(jìn)入不熟悉的領(lǐng)域總是件好事。

這幾本書中,最深入JVM內(nèi)部的是《Oracle JRockit: The Definitive Guide》;有豐富調(diào)優(yōu)建議的是《Java Performance》;結(jié)合實(shí)現(xiàn)大概介紹JVM的抽象概念的是周志明的《深入理解Java虛擬機(jī)》。
  

4. 虛擬機(jī)的入門級實(shí)現(xiàn)

  
先通過《Language Implementation Patterns》了解編程語言的一些入門級實(shí)現(xiàn)方式,把高級語言編譯器與虛擬機(jī)兩個概念聯(lián)系起來。
  
然后通過《プログラミング言語を作る》了解非常簡易的、用樹遍歷式以及字節(jié)碼式解釋器實(shí)現(xiàn)虛擬機(jī)大概是個怎么回事。雖然這本書沒有實(shí)現(xiàn)JVM,但它介紹的Diksam與早期JVM的實(shí)現(xiàn)頗有相似之處,可參考。
  
接下來《深入嵌入式Java虛擬機(jī)》介紹了一種實(shí)際的JVM——KVM的實(shí)現(xiàn)細(xì)節(jié)。KVM是CLDC的參考實(shí)現(xiàn)(RI)里的JVM,結(jié)構(gòu)簡單,資源消耗小,適合入門閱讀。
  
這部分最后是《The School of Niklaus Wirth》,里面有一章介紹了HotSpot Client Compiler 的原始設(shè)計(jì)思路。這是個非常簡單、但相對來說性能還不錯的JIT編譯器,可用于對JIT編譯器的基本了解。這本書本身就很贊,不為學(xué)習(xí)虛擬機(jī)也可以一讀。
  
需要注意的是從“簡易的JVM實(shí)現(xiàn)”到“高性能、復(fù)雜的JVM實(shí)現(xiàn)”跨度非常大;前者的許多部分的實(shí)現(xiàn)方式與后者相當(dāng)不同。先從簡易的實(shí)現(xiàn)開始入手主要是為了對JVM里大概都有些什么組件有所了解。但如果目標(biāo)是了解高性能JVM的實(shí)現(xiàn),那就必須在GC、編譯原理方面打下更好的基礎(chǔ),重新洗一次腦。

5. C++基礎(chǔ)書

  
下面要開始逐漸深入JVM的內(nèi)部實(shí)現(xiàn),如果沒有良好的C或(與?)C++基礎(chǔ)會比較吃力。雖然也有幾乎完全用Java語言實(shí)現(xiàn)的高性能JVM,例如Maxine VM與Jikes RVM,但它們都是研究性質(zhì)的;商用JVM實(shí)現(xiàn)仍然是C與C++的天下。
  
這里我先推薦C++之父自己寫的那本書來入門。雖然BS巨巨后來還出過本新書,而近來也漸漸開始有介紹C++11的入門書,但實(shí)際上現(xiàn)在多數(shù)JVM實(shí)現(xiàn)用的還是C99或非常古老的C++(連C++03都不一定用到了),所以用這本老書應(yīng)該就夠了。

然后通過《深度探索C++對象模型》來學(xué)習(xí)C++對象模型的常見實(shí)現(xiàn)方式。這對后面理解Java對象模型的實(shí)現(xiàn)很有幫助。
  

6. GC與編譯原理的入門書

  
GC書總共就那么幾本,倒也沒啥可挑的?!禩he Garbage Collection Handbook》是絕對必讀。
  
編譯原理的書就稍微尷尬些?,F(xiàn)有的編譯原理書大都針對靜態(tài)編譯器、針對像C或C++那樣的偏靜態(tài)、偏native的語言。我還沒讀到過什么編譯原理書是專門介紹JIT編譯器或者說動態(tài)編譯器的。靜態(tài)與動態(tài)編譯器會有些取舍上、實(shí)現(xiàn)策略上的差異,不過還好其核心的原理都是一樣的,所以還是可以推薦幾本書。龍書用來最初入門,鯨書用來補(bǔ)充一些優(yōu)化相關(guān)的知識,EAC第二版用來學(xué)習(xí)編譯器一種比較良好的邏輯組織方式,最后學(xué)一下針對現(xiàn)代機(jī)器的優(yōu)化。
  

7. 介紹計(jì)算機(jī)體系結(jié)構(gòu)的書

  
實(shí)際JVM實(shí)現(xiàn)里,如果有JIT編譯器或者動態(tài)編譯器那它們的編譯目標(biāo)多半是底層機(jī)器的機(jī)器碼。這就涉及到計(jì)算機(jī)體系結(jié)構(gòu)了。

如果您只對Java語言和抽象的JVM有一定了解,那可以用《計(jì)算機(jī)組成及匯編語言原理》來入門。這本書比較奇葩,用JVM的字節(jié)碼指令集來當(dāng)作真實(shí)機(jī)器介紹體系結(jié)構(gòu)的概念。我并不太喜歡這本書,但感覺它對有Java背景的初學(xué)者來說應(yīng)該有點(diǎn)用。要注意的是千萬別只讀這本書來入門,請結(jié)合CSAPP來重新洗一次腦。

如果對C或C++已經(jīng)有所了解,那《深入理解計(jì)算機(jī)系統(tǒng)》(CSAPP)是計(jì)算機(jī)體系結(jié)構(gòu)入門的最適合的書了。
  

8. 進(jìn)一步閱讀

  
到此為止各種抽象概念應(yīng)該都了解得差不多了。那么要在真實(shí)的機(jī)器上實(shí)現(xiàn)高性能JVM,就必須要對真實(shí)機(jī)器的指令集細(xì)節(jié)有所了解。x86/x86-64、SPARC、ARM、MIPS,要在哪個平臺上做高性能實(shí)現(xiàn)就要學(xué)習(xí)哪個平臺的指令集及指令級別優(yōu)化技巧。這里就不具體推薦書了。
  
操作系統(tǒng)層面的知識同樣重要。像是說JVM要實(shí)現(xiàn)線程、內(nèi)存分配啥的,都可能要跟系統(tǒng)調(diào)用或CRT對系統(tǒng)調(diào)用的包裝打交道。這部分也需要另外找書來讀。我回頭再考慮下要不要加幾本道這個豆列里來。
  
另外,從80年代開始高級語言虛擬機(jī)的實(shí)現(xiàn)技術(shù)有了突飛猛進(jìn)的發(fā)展,但卻沒有專門的書對這個領(lǐng)域做綜述和導(dǎo)讀。多數(shù)有用的資料其實(shí)還是在論文里。光靠讀書是遠(yuǎn)遠(yuǎn)不夠用的,論文這塊也請關(guān)注。
  
順便廣告一下:我的博客里關(guān)于虛擬機(jī)的文章也推薦給大家閱讀:

http://rednaxelafx.iteye.com/blog/362738

  

  
這個豆列沒有漏掉《Inside the Java Virtual Machine, Second Edition》,中文版《深入Java虛擬機(jī)(原書第2版)》,只是我現(xiàn)在已經(jīng)不再推薦它了。這本書剛出版的時候確實(shí)引起了一番學(xué)習(xí)Java虛擬機(jī)的熱潮,但其部分內(nèi)容從現(xiàn)在的角度看已經(jīng)過時,特別是涉及JVM實(shí)現(xiàn)的部分。像火車算法什么的現(xiàn)在已經(jīng)沒有JVM實(shí)現(xiàn)使用。不過話說回來,了解了解這些過時的信息也沒什么不好,前提是能自己分辨清楚哪些信息是適用于現(xiàn)在的JVM的,而哪些已經(jīng)成為了歷史。
  
另外有一本清華大學(xué)出版社出的《解析Java虛擬機(jī)開發(fā)——權(quán)衡優(yōu)化.高效和安全的最優(yōu)方案》,這本純粹是對周志明的《深入理解Java虛擬機(jī)》一書的抄襲。然而抄襲也抄得很不給力,印刷、排版都不如原版。建議不要購買。

轉(zhuǎn)自 豆瓣《從表到里學(xué)習(xí)JVM實(shí)現(xiàn)》書單豆列

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/64016.html

相關(guān)文章

  • 重學(xué)計(jì)算機(jī)組成原理(二)- 制定學(xué)習(xí)路線,攀登“性能”之巔

    摘要:計(jì)算機(jī)組成中的大量原理和設(shè)計(jì),都對應(yīng)著性能這個詞。時間的倒數(shù)性能計(jì)算機(jī)的性能,其實(shí)和體力勞動很像,好比是我們要搬東西。對于計(jì)算機(jī)的性能,我們需要有個標(biāo)準(zhǔn)來衡量。花的時間越少,自然性能就越好。 0 學(xué)習(xí)路線的知識點(diǎn)概括 showImg(https://segmentfault.com/img/remote/1460000020031616?w=3832&h=2540); 學(xué)習(xí)計(jì)算機(jī)組成原...

    DrizzleX 評論0 收藏0
  • 數(shù)據(jù)庫的本質(zhì)、概念及其應(yīng)用實(shí)踐(一)

    摘要:今天這堂課,分為三個大點(diǎn),正如標(biāo)題所指出的,是討論數(shù)據(jù)的本質(zhì)概念與應(yīng)用實(shí)踐。采用一些文件型數(shù)據(jù)庫,比如支持訪問的文本數(shù)據(jù)庫,比如比如除了特定的數(shù)據(jù)類型,一般也只保存文本描述數(shù)據(jù)。上面的場景,大多是結(jié)構(gòu)化數(shù)據(jù)的處理場景,像文本數(shù)據(jù)庫數(shù)據(jù)庫。 今天這堂課,分為三個大點(diǎn),正如標(biāo)題所指出的,是討論數(shù)據(jù)的本質(zhì)、概念與應(yīng)用實(shí)踐。第一點(diǎn)本質(zhì)的探討是站在一個更高的高度來分析數(shù)據(jù)的產(chǎn)生以及各種使用場景,...

    William_Sang 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<