- 實戰Java虛擬機:JVM故障診斷與性能優化(第2版)
- 葛一鳴
- 2281字
- 2024-01-08 16:10:47
前言
關于Java生態圈
Java是目前應用最廣泛的軟件開發平臺之一。隨著Java及Java社區的不斷壯大,Java也早已不再是簡簡單單的一門計算機語言了,它更是一個平臺、一種文化、一個社區。
作為一個平臺,Java虛擬機扮演著舉足輕重的作用。除了Java語言,任何一種能夠被編譯成字節碼的計算機語言都屬于Java這個平臺。Groovy、Scala、JRuby、Kotlin等都是Java平臺的一部分,它們依賴于Java虛擬機,同時,Java平臺也因為它們變得更加豐富多彩。
作為一種文化,Java幾乎成了“開源”的代名詞。在Java程序中,有著數不清的開源軟件和框架,如Tomcat、Struts、Hibernate、Spring等。就連JDK和JVM自身也有不少開源的實現,如OpenJDK、Harmony??梢哉f,“共享”的精神在Java世界里體現得淋漓盡致。
作為一個社區,Java擁有無數的開發人員,有數不清的論壇和資料。從桌面應用軟件、嵌入式開發到企業級應用、后臺服務器、中間件,都可以看到Java的身影。其應用形式之復雜、參與人數之眾多也令人咋舌??梢哉f,Java社區儼然已經成為一個良好而龐大的生態系統,而本書,將主要介紹這個生態系統的核心——Java虛擬機。
第2版的重點修訂
作者希望本書第2版的內容能夠涵蓋JDK 7~JDK10,所以特做如下修訂:
· JDK 10 源碼環境的下載與搭建。
· JDK 10 JVM的調試方法介紹。
· JDK 10 運行參數的演變。
· JDK 10用G1垃圾回收器替代CMS垃圾回收器,成為默認的垃圾回收器。
· JDK 10調試工具的更新,廢除功能類似的調試工具,重點推薦使用Visual VM。
本書的體系結構
本書立足于實際開發,又不缺乏理論介紹,力求通俗易懂、循序漸進。全書共分為11章。
第1章綜述,介紹了Java虛擬機的概念、定義,講解了Java語言規范和Java虛擬機規范,最后還介紹了OpenJDK的調試方法。
第2章介紹了Java虛擬機的總體架構,說明了堆、棧、方法區等內存空間的作用和彼此之間的聯系。
第3章介紹了Java虛擬機的常用配置參數,重點對垃圾回收跟蹤參數、內存配置參數做了詳細介紹,并給出了案例說明。
第4章從理論層面介紹了垃圾回收的算法,如引用計數、標記清除、標記壓縮、復制算法等。本章是第5章的理論基礎。
第5章基于垃圾回收的理論知識,進一步詳細介紹了Java虛擬機中實際使用的各種垃圾回收器,包括串行回收器、并行回收器、CMS、G1等。
第6章介紹了Java虛擬機的性能監控和故障診斷工具,考慮到實用性,也介紹了系統級性能監控工具的使用,兩者結合,可以更好地幫助讀者處理實際問題。
第7章詳細介紹了對Java堆的分析方法和案例,主要講解了MAT和Visual VM兩款工具的使用,以及各自OQL的編寫方式。
第8章介紹了Java虛擬機對多線程,尤其是對鎖的支持。本章不僅介紹了虛擬機內部鎖的實現、優化機制,也給出了Java語言層面的一些鎖優化思路,最后還介紹了無鎖的并行控制方法。
第9章介紹了Java虛擬機的核心——Class文件結構,Class文件作為Java虛擬機的基石,有著舉足輕重的作用,對深入理解Java虛擬機有著不可忽視的作用。
第10章介紹了Java虛擬機中類的裝載系統,其中著重介紹了Java虛擬機中ClassLoader的實現及設計模式。
第11章介紹了Java虛擬機的執行系統和字節碼。為了幫助讀者更快、更好地理解Java字節碼,本章對字節碼進行了分類講解,并且理論聯系實際,給出了通過ASM框架進行字節碼注入的案例。
本書特色
本書的主要特點有:
· 結構清晰。本書采用從整體到局部的視角,首先,第1、2章介紹了Java虛擬機的整體概況和結構。接著步步為營,每一章節對應單獨的知識點,力求展示虛擬機的全貌。
· 理論結合實戰。本書不甘心于簡單地枚舉理論知識,在每一個理論背后,都給出了演示示例供讀者參考,幫助讀者更好地消化這些理論。比如,在對Class文件結構和字節碼的介紹中,不僅僅簡單地給出了理論說明,更是使用ASM框架將這些理論應用于實踐,盡可能地做到理論與實踐結合。
· 專注專業。本書著眼于Java虛擬機,對Java虛擬機的原理和實踐做了豐富的介紹,包括但不限于體系結構、虛擬機的調試方式、常用參數、垃圾回收系統、Class文件結構、執行系統等,力求從多角度更專業地對Java虛擬機進行探討。
· 通俗易懂。本書依然服務于廣大虛擬機初學者,盡量避免采用過于理論化的描述方式,簡單的白話文風格貫穿全書,盡量使讀者在閱讀過程中少盲點、無盲點。
· 技術全面。縱橫Windows和Linux雙系統下的性能診斷、涉及32位系統和64位系統的優化比較、貫穿從JDK 1.5到JDK 10的優化演進。
適合閱讀人群
雖然本書講解力求通俗,但要通讀本書并取得良好的學習效果,要求讀者需要具備基本的Java知識或者一定的編程經驗。因此,本書適合以下讀者:
· 擁有一定開發經驗的Java平臺開發人員(Java、Scala、JRuby等)。
· 軟件設計師、架構師。
· 系統調優人員。
· 有一定的Java編程基礎并希望進一步理解Java的程序員。
· 虛擬機愛好者,JVM實踐者。
本書的約定
本書在敘述過程中,有如下約定:
· 本書中所述的JDK 1.5、JDK 1.6、JDK 1.7、JDK 1.8、JDK 1.9、JDK 1.10等同于JDK 5、JDK 6、JDK 7、JDK 8、JDK 9、JDK 10。
· 如無特殊說明,Java虛擬機均指HotSpot虛擬機。
· 如無特殊說明,本書的程序、示例均在JDK 7~JDK 10環境中運行。
聯系作者
本書的寫作過程遠比想象的艱辛,為了讓全書能夠更清楚、更正確地表達和論述,我經歷了好多個不眠之夜,即使現在回想起來,也忍不住會打個寒戰。由于寫作水平的限制,書中難免會有不妥之處,望讀者諒解。
為此,如果讀者有任何疑問或者建議,非常歡迎大家加入QQ群254693571,一起探討學習中的困難、分享學習的經驗,我期待與大家一起交流、共同進步。同時,也希望大家可以關注我的博客http://www.uucode.net/。
感謝
這本書能夠面世,是因為得到了眾人的支持。首先,要感謝我的妻子,她始終不辭辛勞,毫無怨言地對我照顧有加,才讓我得以騰出大量時間,并可以安心工作。其次,要感謝編輯為我一次又一次地審稿改錯、批評指正,才讓本書逐步完善。最后,感謝我的母親30年如一日對我的體貼和關心。
特別感謝網友千馬奕在JDK 1.9、JDK1.10下對本書所做的測試和修訂。