|
-- 會員 / 註冊 --
|
|
|
|
自己動手寫Java虛擬機 ( 簡體 字) |
作者:張秀宏 | 類別:1. -> 程式設計 -> JAVA -> Java |
譯者: |
出版社:機械工業出版社 | 3dWoo書號: 44255 詢問書籍請說出此書號!【缺書】 NT售價: 345 元 |
出版日:5/1/2016 |
頁數:267 |
光碟數:0 |
|
站長推薦: |
印刷:黑白印刷 | 語系: ( 簡體 版 ) |
|
加入購物車 │加到我的最愛 (請先登入會員) |
ISBN:9787111534136 |
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 序 |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證) |
作者序: |
譯者序: |
前言: |
內容簡介:本書將帶領讀者使用Go語言,從零開始打找造屬于我們自己的Java虛擬機實現。全書共分11章,從代碼和實戰的角度對class文件格式、運行時數據區域、指令集和解釋器、類和對象內部結構、方法調用和返回、異常處理等Java虛擬機核心概念進行了詳細討論。本書循序漸進,每一章都有可以獨立編譯和運行的代碼。通過實踐的方式,相信讀者可以更深刻地領悟Java虛擬機的工作原理。
|
目錄:
第1章 命令行工具 1
1.1 準備工作 1
1.1.1 安裝JDK 1
1.1.2 安裝Go 2
1.1.3 創建目錄結構 3
1.2 java命令 4
1.3 編寫命令行工具 5
1.4 測試本章代碼 7
1.5 本章小結 8
第2章 搜索class文件 9
2.1 類路徑 9
2.2 準備工作 10
2.3 實現類路徑 11
2.3.1 Entry接口 12
2.3.2 DirEntry 13
2.3.3 ZipEntry 14
2.3.4 CompositeEntry 15
2.3.5 WildcardEntry 17
2.3.6 Classpath 17
2.4 測試本章代碼 20
2.5 本章小結 21
第3章 解析class文件 23
3.1 class文件 24
3.2 解析class文件 25
3.2.1 讀取數據 26
3.2.2 整體結構 27
3.2.3 魔數 30
3.2.4 版本號 31
3.2.5 類訪問標志 32
3.2.6 類和超類索引 32
3.2.7 接口索引表 33
3.2.8 字段和方法表 33
3.3 解析常量池 35
3.3.1 ConstantPool結構體 35
3.3.2 ConstantInfo接口 37
3.3.3 CONSTANT_Integer_info 39
3.3.4 CONSTANT_Float_info 40
3.3.5 CONSTANT_Long_info 40
3.3.6 CONSTANT_Double_info 41
3.3.7 CONSTANT_Utf8_info 42
3.3.8 CONSTANT_String_info 43
3.3.9 CONSTANT_Class_info 45
3.3.10 CONSTANT_NameAnd-Type_info 46
3.3.11 CONSTANT_Fieldref_info、
CONSTANT_Methodref_info和CONSTANT_Interface-Methodref_info
47
3.3.12 常量池小結 49
3.4 解析屬性表 50
3.4.1 AttributeInfo接口 50
3.4.2 Deprecated和Synthetic屬性 53
3.4.3 SourceFile屬性 54
3.4.4 ConstantValue屬性 55
3.4.5 Code屬性 56
3.4.6 Exceptions屬性 58
3.4.7 LineNumberTable和
LocalVariableTable屬性 59
3.5 測試本章代碼 61
3.6 本章小結 63
第4章 運行時數據區 65
4.1 運行時數據區概述 66
4.2 數據類型 67
4.3 實現運行時數據區 68
4.3.1 線程 68
4.3.2 Java虛擬機棧 69
4.3.3 幀 71
4.3.4 局部變量表 72
4.3.5 操作數棧 74
4.3.6 局部變量表和操作數棧實例分析 76
4.4 測試本章代碼 81
4.5 本章小結 83
第5章 指令集和解釋器 85
5.1 字節碼和指令集 86
5.2 指令和指令解碼 88
5.2.1 Instruction接口 89
5.2.2 BytecodeReader 91
5.3 常量指令 92
5.3.1 nop指令 92
5.3.2 const系列指令 93
5.3.3 bipush和sipush指令 94
5.4 加載指令 94
5.5 存儲指令 95
5.6 棧指令 96
5.6.1 pop和pop2指令 96
5.6.2 dup指令 97
5.6.3 swap指令 98
5.7 數學指令 98
5.7.1 算術指令 98
5.7.2 位移指令 99
5.7.3 布爾運算指令 101
5.7.4 iinc指令 102
5.8 類型轉換指令 102
5.9 比較指令 103
5.9.1 lcmp指令 103
5.9.2 fcmp和dcmp指令 104
5.9.3 if指令 105
5.9.4 if_icmp指令 106
5.9.5 if_acmp指令 107
5.10 控制指令 108
5.10.1 goto指令 108
5.10.2 tableswitch指令 108
5.10.3 lookupswitch指令 110
5.11 擴展指令 111
5.11.1 wide指令 111
5.11.2 ifnull和ifnonnull指令 113
5.11.3 goto_w指令 113
5.12 解釋器 114
5.13 測試本章代碼 118
5.14 本章小結 120
第6章 類和對象 121
6.1 方法區 122
6.1.1 類信息 122
6.1.2 字段信息 124
6.1.3 方法信息 125
6.1.4 其他信息 127
6.2 運行時常量池 127
6.2.1 類符號引用 129
6.2.2 字段符號引用 130
6.2.3 方法符號引用 132
6.2.4 接口方法符號引用 132
6.3 類加載器 133
6.3.1 readClass() 134
6.3.2 defineClass() 135
6.3.3 link() 136
6.4 對象、實例變量和類變量 136
6.5 類和字段符號引用解析 141
6.5.1 類符號引用解析 141
6.5.2 字段符號引用解析 142
6.6 類和對象相關指令 144
6.6.1 new指令 144
6.6.2 putstatic和getstatic指令 146
6.6.3 putfield和getfield指令 148
6.6.4 instanceof和checkcast指令 150
6.6.5 ldc指令 154
6.7 測試本章代碼 156
6.8 本章小結 160
第7章 方法調用和返回 161
7.1 方法調用概述 161
7.2 解析方法符號引用 163
7.2.1 非接口方法符號引用 163
7.2.2 接口方法符號引用 165
7.3 方法調用和參數傳遞 166
7.4 返回指令 169
7.5 方法調用指令 170
7.5.1 invokestatic指令 170
7.5.2 invokespecial指令 170
7.5.3 invokevirtual指令 172
7.5.4 invokeinterface指令 174
7.6 改進解釋器 176
7.7 測試方法調用 178
7.8 類初始化 181
7.9 本章小結 185
第8章 數組和字符串 187
8.1 數組概述 187
8.2 數組實現 188
8.2.1 數組對象 188
8.2.2 數組類 190
8.2.3 加載數組類 191
8.3 數組相關指令 191
8.3.1 newarray指令 192
8.3.2 anewarray指令 194
8.3.3 arraylength指令 195
8.3.4 aload指令 196
8.3.5 astore指令 197
8.3.6 multianewarray指令 198
8.3.7 完善instanceof和checkcast指令 201
8.4 測試數組 203
8.5 字符串 204
8.5.1 字符串池 205
8.5.2 完善ldc指令 206
8.5.3 完善類加載器 207
8.6 測試字符串 207
8.7 本章小結 210
第9章 本地方法調用 211
9.1 注冊和查找本地方法 212
9.2 調用本地方法 213
9.3 反射 215
9.3.1 類和對象之間的關系 215
9.3.2 修改類加載器 217
9.3.3 基本類型的類 219
9.3.4 修改ldc指令 220
9.3.5 通過反射獲取類名 221
9.3.6 測試本節代碼 224
9.4 字符串拼接和String.intern()方法 225
9.4.1 Java類庫 225
9.4.2 System.arraycopy()方法 227
9.4.3 Float. floatToRawIntBits()和Double.doubleToRawLongBits()方法 229
9.4.4 String.intern()方法 229
9.4.5 測試本節代碼 230
9.5 Object.hashCode()、equals()和toString() 231
9.6 Object.clone() 233
9.7 自動裝箱和拆箱 235
9.8 本章小結 238
第10章 異常處理 239
10.1 異常處理概述 239
10.2 異常拋出 240
10.3 異常處理表 241
10.4 實現athrow指令 245
10.5 Java虛擬機棧信息 248
10.6 測試本章代碼 251
10.7 本章小結 252
第11章 結束 253
11.1 System類是如何被初始化的 253
11.2 初始化System類 255
11.3 System.out.println()是如何工作的 258
11.4 測試本章代碼 260
11.5 總結 260
附錄 指令表 263
|
序: |
|