失效链接处理 |
自己动手写Java虚拟机 PDF 下载
转载自:http://www.jb51.net/books/527802.html
本站整理下载:
版权归出版社和原作者所有,链接已删除,请购买正版
用户下载说明:
电子版仅供预览,下载后24小时内务必删除,支持正版,喜欢的请购买正版书籍:
http://product.dangdang.com/1371802282.html
相关截图:
资料简介:
本书将带领读者使用Go语言,从零开始打找造属于我们自己的Java虚拟机实现。全书共分11章,从代码和实战的角度对class文件格式、运行时数据区域、指令集和解释器、类和对象内部结构、方法调用和返回、异常处理等Java虚拟机核心概念进行了详细讨论。本书循序渐进,每一章都有可以独立编译和运行的代码。通过实践的方式,相信读者可以更深刻地领悟Java虚拟机的工作原理。
资料目录:
前言 第1章命令行工具1 1.1准备工作1 1.1.1安装JDK1 1.1.2安装Go2 1.1.3创建目录结构3 1.2java命令4 1.3编写命令行工具5 1.4测试本章代码7 1.5本章小结8 第2章搜索class文件9 2.1类路径9 2.2准备工作10 2.3实现类路径11 2.3.1Entry接口12 2.3.2DirEntry13 2.3.3ZipEntry14 2.3.4CompositeEntry15 2.3.5WildcardEntry17 2.3.6Classpath17 2.4测试本章代码20 2.5本章小结21 第3章解析class文件23 3.1class文件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.1ConstantPool结构体35 3.3.2ConstantInfo接口37 3.3.3CONSTANT_Integer_info39 3.3.4CONSTANT_Float_info40 3.3.5CONSTANT_Long_info40 3.3.6CONSTANT_Double_info41 3.3.7CONSTANT_Utf8_info42 3.3.8CONSTANT_String_info43 3.3.9CONSTANT_Class_info45 3.3.10CONSTANT_NameAnd-Type_info46 3.3.11CONSTANT_Fieldref_info、 CONSTANT_Methodref_info和CONSTANT_Interface-Methodref_info47 3.3.12常量池小结49 3.4解析属性表50 3.4.1AttributeInfo接口50 3.4.2Deprecated和Synthetic属性53 3.4.3SourceFile属性54 3.4.4ConstantValue属性55 3.4.5Code属性56 3.4.6Exceptions属性58 3.4.7LineNumberTable和 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.2Java虚拟机栈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.1Instruction接口89 5.2.2BytecodeReader91 5.3常量指令92 5.3.1nop指令92 5.3.2const系列指令93 5.3.3bipush和sipush指令94 5.4加载指令94 5.5存储指令95 5.6栈指令96 5.6.1pop和pop2指令96 5.6.2dup指令97 5.6.3swap指令98 5.7数学指令98 5.7.1算术指令98 5.7.2位移指令99 5.7.3布尔运算指令101 5.7.4iinc指令102 5.8类型转换指令102 5.9比较指令103 5.9.1lcmp指令103 5.9.2fcmp和dcmp指令104 5.9.3if指令105 5.9.4if_icmp指令106 5.9.5if_acmp指令107 5.10控制指令108 5.10.1goto指令108 5.10.2tableswitch指令108 5.10.3lookupswitch指令110 5.11扩展指令111 5.11.1wide指令111 5.11.2ifnull和ifnonnull指令113 5.11.3goto_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.1readClass()134 6.3.2defineClass()135 6.3.3link()136 6.4对象、实例变量和类变量136 6.5类和字段符号引用解析141 6.5.1类符号引用解析141 6.5.2字段符号引用解析142 6.6类和对象相关指令144 6.6.1new指令144 6.6.2putstatic和getstatic指令146 6.6.3putfield和getfield指令148 6.6.4instanceof和checkcast指令150 6.6.5ldc指令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.1invokestatic指令170 7.5.2invokespecial指令170 7.5.3invokevirtual指令172 7.5.4invokeinterface指令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.1newarray指令192 8.3.2anewarray指令194 8.3.3arraylength指令195 8.3.4aload指令196 8.3.5astore指令197 8.3.6multianewarray指令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.1Java类库225 9.4.2System.arraycopy()方法227 9.4.3Float.floatToRawIntBits()和Double.doubleToRawLongBits()方法229 9.4.4String.intern()方法229 9.4.5测试本节代码230 9.5Object.hashCode()、equals()和toString()231 9.6Object.clone()233 9.7自动装箱和拆箱235 9.8本章小结238 第10章异常处理239 10.1异常处理概述239 10.2异常抛出240 10.3异常处理表241 10.4实现athrow指令245 10.5Java虚拟机栈信息248 10.6测试本章代码251 10.7本章小结252 第11章结束253 11.1System类是如何被初始化的253 11.2初始化System类255 11.3System.out.println()是如何工作的258 11.4测试本章代码260 11.5总结260 附录指令表263 |