国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

從表到里學習JVM實現

Cristic / 1512人閱讀

在社會化分工、軟件行業細分專業化的趨勢下,會真的參與到底層系統實現的人肯定是越來越少(比例上說)。真的會參與到JVM實現的人肯定是少數。

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

本豆列的脈絡是:
  

1. JVM與Java語言規范

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

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

2. 虛擬機概論

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

3. 為Java程序員從用戶的角度介紹JVM的使用經驗的幾本書

  
雖然這幾本并沒有深入到JVM實現的非常細節的角落,但對已經習慣用Java語言編程的程序員來說,有這么幾本書帶領自己從熟悉的領域進入不熟悉的領域總是件好事。

這幾本書中,最深入JVM內部的是《Oracle JRockit: The Definitive Guide》;有豐富調優建議的是《Java Performance》;結合實現大概介紹JVM的抽象概念的是周志明的《深入理解Java虛擬機》。
  

4. 虛擬機的入門級實現

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

5. C++基礎書

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

然后通過《深度探索C++對象模型》來學習C++對象模型的常見實現方式。這對后面理解Java對象模型的實現很有幫助。
  

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

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

7. 介紹計算機體系結構的書

  
實際JVM實現里,如果有JIT編譯器或者動態編譯器那它們的編譯目標多半是底層機器的機器碼。這就涉及到計算機體系結構了。

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

如果對C或C++已經有所了解,那《深入理解計算機系統》(CSAPP)是計算機體系結構入門的最適合的書了。
  

8. 進一步閱讀

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

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

  

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

轉自 豆瓣《從表到里學習JVM實現》書單豆列

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/64016.html

相關文章

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

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

    DrizzleX 評論0 收藏0
  • 數據庫的本質、概念及其應用實踐(一)

    摘要:今天這堂課,分為三個大點,正如標題所指出的,是討論數據的本質概念與應用實踐。采用一些文件型數據庫,比如支持訪問的文本數據庫,比如比如除了特定的數據類型,一般也只保存文本描述數據。上面的場景,大多是結構化數據的處理場景,像文本數據庫數據庫。 今天這堂課,分為三個大點,正如標題所指出的,是討論數據的本質、概念與應用實踐。第一點本質的探討是站在一個更高的高度來分析數據的產生以及各種使用場景,...

    William_Sang 評論0 收藏0

發表評論

0條評論

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