×
暂无评论
图文详情
  • ISBN:9787111534136
  • 装帧:暂无
  • 册数:暂无
  • 重量:暂无
  • 开本:16开
  • 页数:267
  • 出版时间:2016-05-01
  • 条形码:9787111534136 ; 978-7-111-53413-6

本书特色

java虚拟机非常复杂,要想真正理解它的工作原理,*好的方式就是自己动手编写一个!本书是继《深入理解java虚拟机》之后的又一经典著作,它一方面遵循《java虚拟机规范》,一方面又独辟蹊径,不仅能让java虚拟机的学习变得更加简单和有趣,而且能让你对java虚拟机的原理认识更深入和更深刻!本书摒弃了传统的以解读枯燥的java虚拟机规范文档和分析繁琐的java虚拟机源代码的方式来讲解java虚拟机,取而代之的是,以实践的方式,引导读者如何从零开始构建和实现一个java虚拟机,整个过程不仅能让读者做到对java虚拟机知其然而且知其所以然,还能屏蔽大量不必要的繁琐细节,体会到实现过程中的成就感,让学习过程更加轻松、愉悦和高效。更重要的是,这种方式能引导读者更深入地认识和掌握java虚拟机的工作原理。  

内容简介

本书将带领读者使用Go语言,从零开始打找造属于我们自己的Java虚拟机实现。全书共分11章,从代码和实战的角度对class文件格式、运行时数据区域、指令集和解释器、类和对象内部结构、方法调用和返回、异常处理等Java虚拟机核心概念进行了详细讨论。本书循序渐进,每一章都有可以独立编译和运行的代码。通过实践的方式,相信读者可以更深刻地领悟Java虚拟机的工作原理。

目录

目  录 contents前言第1章 命令行工具 11.1 准备工作 11.1.1 安装jdk 11.1.2 安装go 21.1.3 创建目录结构 31.2 java命令 41.3 编写命令行工具 51.4 测试本章代码 71.5 本章小结 8第2章 搜索class文件 92.1 类路径 92.2 准备工作 102.3 实现类路径 112.3.1 entry接口 122.3.2 direntry 132.3.3 zipentry 142.3.4 compositeentry 152.3.5 wildcardentry 172.3.6 classpath 172.4 测试本章代码 202.5 本章小结 21第3章 解析class文件 233.1 class文件 243.2 解析class文件 253.2.1 读取数据 263.2.2 整体结构 273.2.3 魔数 303.2.4 版本号 313.2.5 类访问标志 323.2.6 类和超类索引 323.2.7 接口索引表 333.2.8 字段和方法表 333.3 解析常量池 353.3.1 constantpool结构体 353.3.2 constantinfo接口 373.3.3 constant_integer_info 393.3.4 constant_float_info 403.3.5 constant_long_info 403.3.6 constant_double_info 413.3.7 constant_utf8_info 423.3.8 constant_string_info 433.3.9 constant_class_info 453.3.10 constant_nameand-type_info 463.3.11 constant_fieldref_info、 constant_methodref_info和constant_interface-methodref_info473.3.12 常量池小结 493.4 解析属性表 503.4.1 attributeinfo接口 503.4.2 deprecated和synthetic属性 533.4.3 sourcefile属性 543.4.4 constantvalue属性 553.4.5 code属性 563.4.6 exceptions属性 583.4.7 linenumbertable和 localvariabletable属性 593.5 测试本章代码 613.6 本章小结 63第4章 运行时数据区 654.1 运行时数据区概述 664.2 数据类型 674.3 实现运行时数据区 684.3.1 线程 684.3.2 java虚拟机栈 694.3.3 帧 714.3.4 局部变量表 724.3.5 操作数栈 744.3.6 局部变量表和操作数栈实例分析 764.4 测试本章代码 814.5 本章小结 83第5章 指令集和解释器 855.1 字节码和指令集 865.2 指令和指令解码 885.2.1 instruction接口 895.2.2 bytecodereader 915.3 常量指令 925.3.1 nop指令 925.3.2 const系列指令 935.3.3 bipush和sipush指令 945.4 加载指令 945.5 存储指令 955.6 栈指令 965.6.1 pop和pop2指令 965.6.2 dup指令 975.6.3 swap指令 985.7 数学指令 985.7.1 算术指令 985.7.2 位移指令 995.7.3 布尔运算指令 1015.7.4 iinc指令 1025.8 类型转换指令 1025.9 比较指令 1035.9.1 lcmp指令 1035.9.2 fcmp和dcmp指令 1045.9.3 if指令 1055.9.4 if_icmp指令 1065.9.5 if_acmp指令 1075.10 控制指令 1085.10.1 goto指令 1085.10.2 tableswitch指令 1085.10.3 lookupswitch指令 1105.11 扩展指令 1115.11.1 wide指令 1115.11.2 ifnull和ifnonnull指令 1135.11.3 goto_w指令 1135.12 解释器 1145.13 测试本章代码 1185.14 本章小结 120第6章 类和对象 1216.1 方法区 1226.1.1 类信息 1226.1.2 字段信息 1246.1.3 方法信息 1256.1.4 其他信息 1276.2 运行时常量池 1276.2.1 类符号引用 1296.2.2 字段符号引用 1306.2.3 方法符号引用 1326.2.4 接口方法符号引用 1326.3 类加载器 1336.3.1 readclass() 1346.3.2 defineclass() 1356.3.3 link() 1366.4 对象、实例变量和类变量 1366.5 类和字段符号引用解析 1416.5.1 类符号引用解析 1416.5.2 字段符号引用解析 1426.6 类和对象相关指令 1446.6.1 new指令 1446.6.2 putstatic和getstatic指令 1466.6.3 putfield和getfield指令 1486.6.4 instanceof和checkcast指令 1506.6.5 ldc指令 1546.7 测试本章代码 1566.8 本章小结 160第7章 方法调用和返回 1617.1 方法调用概述 1617.2 解析方法符号引用 1637.2.1 非接口方法符号引用 1637.2.2 接口方法符号引用 1657.3 方法调用和参数传递 1667.4 返回指令 1697.5 方法调用指令 1707.5.1 invokestatic指令 1707.5.2 invokespecial指令 1707.5.3 invokevirtual指令 1727.5.4 invokeinterface指令 1747.6 改进解释器 1767.7 测试方法调用 1787.8 类初始化 1817.9 本章小结 185第8章 数组和字符串 1878.1 数组概述 1878.2 数组实现 1888.2.1 数组对象 1888.2.2 数组类 1908.2.3 加载数组类 1918.3 数组相关指令 1918.3.1 newarray指令 1928.3.2 anewarray指令 1948.3.3 arraylength指令 1958.3.4 aload指令 1968.3.5 astore指令 1978.3.6 multianewarray指令 1988.3.7 完善instanceof和checkcast指令 2018.4 测试数组 2038.5 字符串 2048.5.1 字符串池 2058.5.2 完善ldc指令 2068.5.3 完善类加载器 2078.6 测试字符串 2078.7 本章小结 210第9章 本地方法调用 2119.1 注册和查找本地方法 2129.2 调用本地方法 2139.3 反射 2159.3.1 类和对象之间的关系 2159.3.2 修改类加载器 2179.3.3 基本类型的类 2199.3.4 修改ldc指令 2209.3.5 通过反射获取类名 2219.3.6 测试本节代码 2249.4 字符串拼接和string.intern()方法 2259.4.1 java类库 2259.4.2 system.arraycopy()方法 2279.4.3 float. floattorawintbits()和double.doubletorawlongbits()方法 2299.4.4 string.intern()方法 2299.4.5 测试本节代码 2309.5 object.hashcode()、equals()和tostring() 2319.6 object.clone() 2339.7 自动装箱和拆箱 2359.8 本章小结 238第10章 异常处理 23910.1 异常处理概述 23910.2 异常抛出 24010.3 异常处理表 24110.4 实现athrow指令 24510.5 java虚拟机栈信息 24810.6 测试本章代码 25110.7 本章小结 252第11章 结束 25311.1 system类是如何被初始化的 25311.2 初始化system类 25511.3 system.out.println()是如何工作的 25811.4 测试本章代码 26011.5 总结 260附录 指令表 263  
展开全部

相关资料

想要了解java虚拟机的内部运行原理,阅读虚拟机规范、书籍、源码是一种常见的途径,而从零开始自己动手编写一个实验室性质的java虚拟机,也许会是一种更加有趣且有效的学习路径。如果不考虑java庞大类库的实现和jvm的实际生产力需求,仅是去“正确地”实现一台java虚拟机,其实并不如大多数人所想的那样高深和困难——只需正确读取class文件中每一条字节码指令,并且能正确执行这些指令所蕴含的操作即可。通过本书,您可以跟随作者的思路和指引,一步步完成java虚拟机的各个组成部分,在动手的过程中了解java虚拟机的运作原理。—— 周志明 《深入理解java虚拟机:jvm高级特性与*佳实践》 作者这是国内**本以实战模式描述jvm原理的书!秀宏对jvm进行了大量研究,在书中深入浅出地分析了class文件的数据结构和jvm的基本原理,并使用go语言用不到1万行的程序代码就实现了jvm的基本模型,是java爱好者了解jvm实现原理的一本好书。实战才是*有效的掌握知识的手段,快快动手,实现属于自己的java虚拟机吧!—— 凌聪 乐元素cto jvm对大多数的java开发人员,无论是初出茅庐的菜鸟以及工作多年的老手,可能都还是一个神秘的、高深莫测的黑匣子。本书的出版,使作者通过一个个实践的方式,一步步带领大家饶有趣味地揭开jvm的神秘面纱,极大加深程序员对java的理解,进而构建更加合理高效的代码。—— 金智伟 钱咸升(北京)网络科技股份公司cto

作者简介

张秀宏  资深Java服务器开发工程师,有多年的Java开发、游戏服务器开发和架构经验,对Java虚拟机有非常深入的研究。曾在EA、华娱无线等游戏公司担任高级服务器工程师职位,现任乐元素Lead软件工程师。

预估到手价 ×

预估到手价是按参与促销活动、以最优惠的购买方案计算出的价格(不含优惠券部分),仅供参考,未必等同于实际到手价。

确定
快速
导航