虛擬機設計與實現 : 以 JVM 為例

[中]李曉峰(Xiao-Feng Li)

  • 虛擬機設計與實現 : 以 JVM 為例-preview-1
  • 虛擬機設計與實現 : 以 JVM 為例-preview-2
虛擬機設計與實現 : 以 JVM 為例-preview-1

買這商品的人也買了...

相關主題

商品描述

本書從一位虛擬機(VM)架構師的角度,以易於理解、層層深入的方式介紹了各種主題和算法,尤其是不同VM通用的主要技術。這些算法用圖示充分解釋,用便於理解的代碼片段實現,使得這些抽象概念對系統軟件工程師而言具像化並可編程。書中還包括一些同類文獻中較少涉及的主題,例如運行時輔助、棧展開和本地接口。本書集理論性與實踐性於一身,不僅結合了高層設計功能與底層實現,而且還結合了高級主題與商業解決方案,是VM設計和工程實踐方面的理想參考讀物。

作者簡介

單業,計算機專業碩士,軟件工程師,曾供職於多家軟件公司,從事軟件開發工作,現居於上海。譯有《你不知道的JavaScript》中卷及下卷。

目錄大綱

第一部分 虛擬機基礎
第1章 虛擬機簡介
1.1 虛擬機類型
1.2 為什麼需要虛擬機
1.3 虛擬機示例
1.3.1 JavaScript引擎
1.3.2 Perl引擎
1.3.3 Android Java VM
1.3.4 Apache Harmony
第2章 虛擬機內部組成
2.1 虛擬機核心組件
2.1.1 加載器與動態鏈接器
2.1.2 執行引擎
2.1.3 內存管理器
2.1.4 線程調度器
2.1.5 語言擴展
2.1.6 傳統模型與虛擬機模型
2.2 虛擬ISA
2.2.1 JVM
2.2.2 JVM與CLR
第3章 虛擬機中的數據結構
3.1 對象與類
3.2 對象表示
3.3 方法描述
第二部分 虛擬機設計
第4章 執行引擎設計
4.1 解釋器
4.1.1 超級指令
4.1.2 選擇性內聯
4.2 JIT編譯
4.2.1 基於方法的JIT
4.2.2 基於蹤跡的JIT
4.2.3 基於區域的JIT
4.3 解釋器與JIT編譯器的關系
4.4 AOT編譯
4.5 編譯時與運行時
第5章 垃圾回收設計
5.1 對象生存期
5.2 引用計數
5.3 對象追蹤
5.4 RC與對象追蹤
5.5 GC安全點
5.6 常用追蹤GC算法
5.6.1 標記清除
5.6.2 追蹤覆制
5.7 常用追蹤GC變體
5.7.1 標記壓縮
5.7.2 滑動壓縮
5.7.3 追蹤轉發
5.7.4 標記覆制
5.7.5 分代式GC
5.8 移動式GC與非移動式GC
5.8.1 數據局部性
5.8.2 跳增指針分配
5.8.3 空閒列表與分配位圖
5.8.4 離散大小列表
5.8.5 標記位與分配位
5.8.6 線程局部分配
5.8.7 移動式GC與非移動式GC的混合
第6章 線程設計
6.1 什麼是線程
6.2 內核線程與用戶線程
6.3 VM線程到OS線程的映射
6.4 同步構件
6.5 monitor
6.5.1 互斥
6.5.2 條件變量
6.5.3 monitorenter
6.5.4 monitorexit
6.5.5 Object.wait()
6.5.6 Object.notify()
6.6 原子
6.7 monitor與原子
6.7.1 阻塞與非阻塞
6.7.2 中央控制點
6.7.3 鎖與非鎖
6.7.4 非阻塞之上的阻塞
6.8 回收器與修改器
6.9 線程局部數據
6.10 GC的線程暫停支持
6.10.1 GC安全點
6.10.2 GC安全區域
6.10.3 基於鎖的安全點
6.10.4 回收中的線程交互
第三部分 虛擬機內部支持
第7章 本地接口
7.1 為何需要本地接口
7.2 從托管代碼到本地代碼的轉換
7.2.1 本地方法封裝
7.2.2 封裝代碼的GC支持
7.2.3 封裝代碼的同步支持
7.3 本地方法實現的綁定
7.4 本地代碼到托管代碼的轉換
7.5 本地代碼到本地代碼的轉換
7.5.1 通過JNI API的本地到本地轉換
7.5.2 為什麼在本地到本地轉換中使用JNI API
第8章 棧展開
8.1 為何需要棧展開
8.2 Java方法幀的棧展開
8.2.1 棧展開設計
8.2.2 棧展開實現
8.3 本地方法幀的棧展開
8.3.1 棧展開設計
8.3.2 Java到本地封裝設計
8.3.3 棧展開實現
8.3.4 本地幀與C幀
第9章 垃圾回收支持
9.1 為何需要垃圾回收支持
9.2 在Java代碼中支持垃圾回收
9.2.1 GC-map
9.2.2 帶寄存器的棧展開
9.3 在本地代碼中支持垃圾回收
9.3.1 對象引用訪問
9.3.2 對象句柄實現
9.3.3 GC安全性維護
9.3.4 對象體訪問
9.3.5 對象分配
9.4 在同步方法中支持垃圾回收
9.4.1 同步Java方法
9.4.2 同步本地方法
9.5 Java與本地代碼轉換中的GC支持
9.5.1 本地到Java
9.5.2 Java到本地
9.5.3 本地到本地
9.6 全局根集
第10章 運行時輔助
10.1 為何需要運行時輔助
10.2 帶運行時輔助的VM服務設計
10.2.1 運行時輔助操作
10.2.2 運行時輔助實現
10.2.3 JNI API作為運行時輔助
10.3 沒有運行時輔助的VM服務設計
10.3.1 運行時輔助的快速路徑
10.3.2 快速路徑VM服務編程
10.4 主要VM服務
第11章 異常拋出
11.1 保存異常拋出上下文
11.1.1 VM保存的上下文
11.1.2 Linux中OS保存的上下文
11.1.3 Windows中OS保存的上下文
11.1.4 同步與異步異常
11.2 本地代碼內與跨本地代碼異常處理
11.2.1 本地代碼內的異常處理
11.2.2 帶異常Java代碼返回到本地代碼
11.2.3 帶異常的本地代碼返回到Java代碼
11.3 保存棧軌跡
11.4 找到異常處理器
11.5 控制轉移
11.5.1 控