商品簡介
除了HotSpot技術,《HotSpot實戰》還對方法論進行了探討。在各個章節的講解中,都會有一些與系統運行機制相關的實戰或練習,供讀者練手。通過這些實戰練習,不僅有助於讀者加深對知識或原理的理解,更為重要的是,它還可以培養讀者獨立探索的思維方式,這有助於讀者把知識融會貫通並靈活應用到實際項目中。
《HotSpot實戰》適合於已具有一定Java編程基礎的讀者,以及在Java或基於JVM的編程語言平臺下進行各類軟件開發的開發人員、測試人員和運維人員。對於JVM和編程語言愛好者來說,《HotSpot實戰》也具有一定的學習參考價值。
作者簡介
名人/編輯推薦
相較于C或C++程序員,我發現Java程序員更容易忽視基礎技術。JVM的出現,為程序員屏蔽了操作系統與硬件的細節,使得程序員從諸如內存管理這樣的繁瑣任務中解放出來。但這不并等同于允許Java程序員放棄對基礎的重視。我們是否有過這樣的經歷,在遇到內存故障、丟包、網絡協議設計、資源瓶頸、證書、二進制等問題時,往往會覺得比較棘手,在尋求解決思路時更是顯得力不從心。這實質上是自身技術遇到了瓶頸難以突破所致。可怕的是,想去深究的時候卻無從下手。
我寫這本書的初衷是為了喚起Java程序員對于基礎技術的重視。事實上,任何平臺的程序員都應當了解平臺的基本特性、實現機制以及接口,這是提高自身修養的必經之路。對于Java程序員來說,我們需要了解的平臺就是JVM。了解JVM的基本實現機制,不僅對于解決實際應用中諸如GC等虛擬機問題時有直接幫助,還有利于我們更好地理解語言本身。
所幸的是,Oracle官方已經將虛擬機項目的源碼開放出來,這對于我們來說簡直就是福音。本書將以OpenJDK和HotSpot為素材,深入淺出地講解我們最為熟悉的一款虛擬機產品的實現。除了Java程序員,從事與Java或JVM相關的開發、測試、運維等技術人員也將在本書中獲益。
目次
1.1 JDK概述
1.1.1 JCP與JSR
1.1.2 JDK的發展歷程
1.1.3 Java 7的語法變化
1.2 動手編譯虛擬機
1.2.1 源代碼下載
1.2.2 HotSpot源代碼結構
1.2.3 搭建編譯環境
1.2.4 編譯目標
1.2.5 編譯過程
1.2.6 編譯常見問題
1.3 實戰:在HotSpot內調試HelloWorld
1.3.1 認識GDB
1.3.2 準備調試腳本
第1章 初識HotSpot 1.1 JDK概述 1.1.1 JCP與JSR 1.1.2 JDK的發展歷程 1.1.3 Java 7的語法變化 1.2 動手編譯虛擬機 1.2.1 源代碼下載 1.2.2 HotSpot源代碼結構 1.2.3 搭建編譯環境 1.2.4 編譯目標 1.2.5 編譯過程 1.2.6 編譯常見問題 1.3 實戰:在HotSpot內調試HelloWorld 1.3.1 認識GDB 1.3.2 準備調試腳本 1.4 小結
第2章 啟動 2.1 HotSpot內核 2.1.1 如何閱讀源代碼 2.1.2 HotSpot內核框架 2.1.3 Prims 2.1.4 Services 2.1.5 Runtime 2.2 啟動 2.2.1 Launcher 2.2.2 虛擬機生命周期 2.2.3 入口:main函數 2.2.4 主線程 2.2.5 InitializeJVM函數 2.2.6 JNI_CreateJavaVM函數 2.2.7 調用Java主方法 2.2.8 JVM退出路徑 2.3 系統初始化 2.3.1 配置OS模塊 2.3.2 配置系統屬性 2.3.3 加載系統庫 2.3.4 啟動線程 2.3.5 vm_init_globals函數:初始化全局數據結構 2.3.6 init_globals函數:初始化全局模塊 2.4 小結
第3章 類與對象 3.1 對象表示機制 3.1.1 OOP-Klass二分模型 3.1.2 Oops模塊 3.1.3 OOP框架與對象訪問機制 3.1.4 Klass與instanceKlass 3.1.5 實戰:用HSDB調試HotSpot 3.2 類的狀態轉換 3.2.1 入口:Class文件 3.2.2 類的狀態 3.2.3 加載 3.2.4 鏈接 3.2.5 初始化 3.2.6 實戰:類的“族譜” 3.2.7 實戰:系統字典 3.3 創建對象 3.3.1 實例對象的創建流程 3.3.2 實戰:探測JVM內部對象 3.4 小結
第4章 運行時數據區 4.1 堆 4.1.1 Java的自動內存管理 4.1.2 堆的管理 4.2 線程私有區域 4.2.1 PC 4.2.2 JVM棧 4.3 方法區 4.3.1 紐帶作用 4.3.2 常量池 4.3.3 常量池緩存:ConstantPoolCache 4.3.4 方法的表示:methodOop 4.3.5 方法的解析:將符號引用轉換成直接引用 4.3.6 代碼放在哪里:ConstMethodOop 4.3.7 實戰:探測運行時常量池 4.4 性能監控數據區:Perf Data 4.4.1 描述這段空間:PerfMemory 4.4.2 查看 4.4.3 生產 4.5 轉儲 4.5.1 用VisualVM進行轉儲分析 4.5.2 JVM Crash 4.6 小結
第5章 垃圾收集 5.1 堆與GC 5.1.1 垃圾收集 5.1.2 分代收集 5.1.3 快速分配 5.1.4 棧上分配和逸出分析 5.1.5 GC公共模塊 5.2 垃圾收集器 5.2.1 設計演進 5.2.2 CMS收集器 5.2.3 G1收集器 5.3 實戰:性能分析方法 5.3.1 獲取GC日志 5.3.2 GC監控信息 5.3.3 內存分析工具 5.3.4 選擇合適的收集器與GC性能評估 5.3.5 不要忽略JVM Crash日志 5.4 小結
第6章 棧 6.1 硬件背景:了解真實機器 6.1.1 程序是如何運行的 6.1.2 x86與棧幀 6.1.3 ARM對Java硬件級加速:Jazelle技術 6.2 Java棧 6.2.1 寄存器式指令集與棧式指令集 6.2.2 HotSpot中的棧 6.2.3 棧幀 6.2.4 充分利用寄存器資源 6.2.5 虛擬機如何調用Java函數 6.2.6 優化:棧頂緩存 6.2.7 實戰:操作數棧 6.3 小結
第7章 解釋器和即時編譯器 7.1 概述 7.2 解釋器如何工作 7.2.1 Interpreter模塊 7.2.2 Code模塊 7.2.3 字節碼表 7.2.4 Code Cache 7.2.5 InterpreterCodelet與Stub隊列 7.2.6 Code生成器 7.2.7 模板表與轉發表 7.2.8 實戰:InterpreterCodelet 7.3 即時編譯器 7.3.1 概述 7.3.2 編譯器模塊 7.3.3 編譯器的基本結構 7.3.4 實戰:編譯原理實踐,了解編譯中間環節 7.4 小結
第8章 指令集 8.1 再說棧式指令集 8.2 數據傳送 8.2.1 局部變量、常量池和操作數棧之間的數據傳送 8.2.2 數據傳送指令 8.2.3 實戰:數組的越界檢查 8.3 類型轉換 8.4 對象的創建和操作 8.5 程序流程控制 8.5.1 控制轉移指令 8.5.2 條件轉移 8.5.3 無條件轉移 8.5.4 復合條件轉移 8.5.5 實戰:switch語句如何使用String 8.6 運算 8.6.1 加法:iadd 8.6.2 取負:ineg 8.7 函數的調用和返回 8.7.1 Java函數分發機制:VTABLE與ITABLE 8.7.2 invoke系列指令 8.7.3 動態分發:覆蓋 8.7.4 靜態分發:重載 8.8 異常 8.8.1 異常表 8.8.2 創建異常 8.8.3 try-catch 8.8.4 finally 8.9 小結
第9章 虛擬機監控工具 9.1 Attach機制 9.1.1 AttachProvider與VirtualMachine 9.1.2 命令的下發:execute() 9.1.3 命令的執行:Attach Listener守護線程 9.2 查看JVM進程 9.2.1 用jps查看Java進程 9.2.2 實戰:定制jps,允許查看庫路徑 9.3 查看和配置JVM 9.3.1 用jinfo查看JVM參數配置 9.3.2 實戰:擴展flags選項,允許查看命令行參數 9.4 堆內存轉儲工具 9.4.1 Heap Dump 9.4.2 原理 9.5 堆轉儲分析 9.5.1 Heap Dump分析工具:jhat 9.5.2 實戰:MAT分析過程 9.6 線程轉儲分析 9.6.1 jstack 9.6.2 實戰:如何分析資源等待 9.7 小結
主題書展
更多書展今日66折
您曾經瀏覽過的商品
購物須知
大陸出版品因裝訂品質及貨運條件與台灣出版品落差甚大,除封面破損、內頁脫落等較嚴重的狀態,其餘商品將正常出貨。
特別提醒:部分書籍附贈之內容(如音頻mp3或影片dvd等)已無實體光碟提供,需以QR CODE 連結至當地網站註冊“並通過驗證程序”,方可下載使用。
無現貨庫存之簡體書,將向海外調貨:
海外有庫存之書籍,等候約45個工作天;
海外無庫存之書籍,平均作業時間約60個工作天,然不保證確定可調到貨,尚請見諒。
為了保護您的權益,「三民網路書店」提供會員七日商品鑑賞期(收到商品為起始日)。
若要辦理退貨,請在商品鑑賞期內寄回,且商品必須是全新狀態與完整包裝(商品、附件、發票、隨貨贈品等)否則恕不接受退貨。