自己動手寫Java虛擬機

自己動手寫Java虛擬機

《自己動手寫Java虛擬機》是2016年5月機械工業出版社出版的圖書,作者是張秀宏。

基本介紹

  • 中文名:自己動手寫Java虛擬機
  • 作者:張秀宏
  • 出版時間:2016年05月
  • 出版社機械工業出版社
  • ISBN:9787111534136
  • 類別: 圖書 / 非虛構
  • 字數:約 83,000 字
  • 提供方:華章數媒
內容簡介,圖書目錄,

內容簡介

Java虛擬機非常複雜,要想真正理解它的工作原理,最好的方式就是自己動手編寫一個。
本書是繼《深入理解Java虛擬機》之後的又一經典著作,它一方面遵循《Java虛擬機規範》,一方面又獨闢蹊徑,不僅能讓Java虛擬機的學習變得更加簡單和有趣,而且能讓你對Java虛擬機的原理認識更深入和更深刻。
本書摒棄了傳統的以解讀枯燥的Java虛擬機規範文檔和分析繁瑣的Java虛擬機原始碼的方式來講解Java虛擬機,取而代之的是,以實踐的方式,引導讀者如何從零開始構建和實現一個Java虛擬機,整個過程不僅能讓讀者做到對Java虛擬機知其然而且知其所以然,還能禁止大量不必要的繁瑣細節,體會到實現過程中的成就感,讓學習過程更加輕鬆、愉悅和高效。更重要的是,這種方式能引導讀者更深入地認識和掌握Java虛擬機的工作原理。

圖書目錄

第1章 命令行工具
1.1 準備工作
1.1.1 安裝JDK
1.1.2 安裝Go
1.1.3 創建目錄結構
1.2 java命令
1.3 編寫命令行工具
1.4 測試本章代碼
1.5 本章小結
第2章 搜尋class檔案
2.1 類路徑
2.2 準備工作
2.3 實現類路徑
2.3.1 Entry接口
2.3.2 DirEntry
2.3.3 ZipEntry
2.3.4 CompositeEntry
2.3.5 WildcardEntry
2.3.6 Classpath
2.4 測試本章代碼
2.5 本章小結
第3章 解析class檔案
3.1 class檔案
3.2 解析class檔案
3.2.1 讀取數據
3.2.2 整體結構
3.2.3 魔數
3.2.4 版本號
3.2.5 類訪問標誌
3.2.6 類和超類索引
3.2.7 接口索引表
3.2.8 欄位和方法表
3.3 解析常量池
3.3.1 ConstantPool結構體
3.3.2 ConstantInfo接口
3.3.3 CONSTANT_Integer_info
3.3.4 CONSTANT_Float_info
3.3.5 CONSTANT_Long_info
3.3.6 CONSTANT_Double_info
3.3.7 CONSTANT_Utf8_info
3.3.8 CONSTANT_String_info
3.3.9 CONSTANT_Class_info
3.3.10 CONSTANT_NameAndType_info
3.3.11 CONSTANT_Fieldref_info、CONSTANT_Methodref_info和CONSTANT_InterfaceMethodref_info
3.3.12 常量池小結
3.4 解析屬性表
3.4.1 AttributeInfo接口
3.4.2 Deprecated和Synthetic屬性
3.4.3 SourceFile屬性
3.4.4 ConstantValue屬性
3.4.5 Code屬性
3.4.6 Exceptions屬性
3.4.7 LineNumberTable和LocalVariableTable屬性
3.5 測試本章代碼
3.6 本章小結
第4章 運行時數據區
4.1 運行時數據區概述
4.2 數據類型
4.3 實現運行時數據區
4.3.1 執行緒
4.3.2 Java虛擬機棧
4.3.3 幀
4.3.4 局部變數表
4.3.5 運算元棧
4.3.6 局部變數表和運算元棧實例分析
4.4 測試本章代碼
4.5 本章小結
第5章 指令集和解釋器
5.1 位元組碼和指令集
5.2 指令和指令解碼
5.2.1 Instruction接口
5.2.2 BytecodeReader
5.3 常量指令
5.3.1 nop指令
5.3.2 const系列指令
5.3.3 bipush和sipush指令
5.4 載入指令
5.5 存儲指令
5.6 棧指令
5.6.1 pop和pop2指令
5.6.2 dup指令
5.6.3 swap指令
5.7 數學指令
5.7.1 算術指令
5.7.2 位移指令
5.7.3 布爾運算指令
5.7.4 iinc指令
5.8 類型轉換指令
5.9 比較指令
5.9.1 lcmp指令
和dcmp指令”>5.9.2 fcmp和dcmp指令
指令”>5.9.3 if指令
指令”>5.9.4 if_icmp指令
指令”>5.9.5 if_acmp指令
5.10 控制指令
5.10.1 goto指令
5.10.2 tableswitch指令
5.10.3 lookupswitch指令
5.11 擴展指令
5.11.1 wide指令
5.11.2 ifnull和ifnonnull指令
5.11.3 goto_w指令
5.12 解釋器
5.13 測試本章代碼
5.14 本章小結
第6章 類和對象
6.1 方法區
6.1.1 類信息
6.1.2 欄位信息
6.1.3 方法信息
6.1.4 其他信息
6.2 運行時常量池
6.2.1 類符號引用
6.2.2 欄位符號引用
6.2.3 方法符號引用
6.2.4 接口方法符號引用
6.3 類載入器
6.3.1 readClass()
6.3.2 defineClass()
6.3.3 link()
6.4 對象、實例變數和類變數
6.5 類和欄位符號引用解析
6.5.1 類符號引用解析
6.5.2 欄位符號引用解析
6.6 類和對象相關指令
6.6.1 new指令
6.6.2 putstatic和getstatic指令
6.6.3 putfield和getfield指令
6.6.4 instanceof和checkcast指令
6.6.5 ldc指令
6.7 測試本章代碼
6.8 本章小結
第7章 方法調用和返回
7.1 方法調用概述
7.2 解析方法符號引用
7.2.1 非接口方法符號引用
7.2.2 接口方法符號引用
7.3 方法調用和參數傳遞
7.4 返回指令
7.5 方法調用指令
7.5.1 invokestatic指令
7.5.2 invokespecial指令
7.5.3 invokevirtual指令
7.5.4 invokeinterface指令
7.6 改進解釋器
7.7 測試方法調用
7.8 類初始化
7.9 本章小結
第8章 數組和字元串
8.1 數組概述
8.2 數組實現
8.2.1 數組對象
8.2.2 數組類
8.2.3 載入數組類
8.3 數組相關指令
8.3.1 newarray指令
8.3.2 anewarray指令
8.3.3 arraylength指令
aload指令”>8.3.4 aload指令
astore指令”>8.3.5 astore指令
8.3.6 multianewarray指令
8.3.7 完善instanceof和checkcast指令
8.4 測試數組
8.5 字元串
8.5.1 字元串池
8.5.2 完善ldc指令
8.5.3 完善類載入器
8.6 測試字元串
8.7 本章小結
第9章 本地方法調用
9.1 註冊和查找本地方法
9.2 調用本地方法
9.3 反射
9.3.1 類和對象之間的關係
9.3.2 修改類載入器
9.3.3 基本類型的類
9.3.4 修改ldc指令
9.3.5 通過反射獲取類名
9.3.6 測試本節代碼
9.4 字元串拼接和String.intern()方法
9.4.1 Java類庫
9.4.2 System.arraycopy()方法
9.4.3 Float.floatToRawIntBits()和Double.doubleToRawLongBits()方法
9.4.4 String.intern()方法
9.4.5 測試本節代碼
9.5 Object.hashCode()、equals()和toString()
9.6 Object.clone()
9.7 自動裝箱和拆箱
9.8 本章小結
第10章 異常處理
10.1 異常處理概述
10.2 異常拋出
10.3 異常處理表
10.4 實現athrow指令
10.5 Java虛擬機棧信息
10.6 測試本章代碼
10.7 本章小結
第11章 結束
11.1 System類是如何被初始化的
11.2 初始化System類
11.3 System.out.println()是如何工作的
11.4 測試本章代碼
11.5 總結
附錄 指令表

相關詞條

熱門詞條

聯絡我們