标签
内容简介
Java虚拟机是Java平台的基石,但OpenJDK等主流实现代码量庞大、以C++编写,初学者很容易在代码细节中迷失。本书另辟蹊径:不解读规范文档,也不逐行分析JDK源码,用Go语言从零开始,亲手实现一个能够运行真实class文件的Java虚拟机。全书共11章,随章节推进逐层叠加功能:先用java命令行工具搭起程序骨架,接着实现类路径搜索与class文件解析(魔数、版本号、常量池、属性表),再构建线程私有的运行时数据区(Java虚拟机栈、栈帧、局部变量表、操作数栈),随后实现指令集与解释器(含150余条字节码指令),并逐步支持类与对象、方法调用与返回、数组与字符串、类加载与方法区。第9章讨论本地方法调用与反射,实现Object.hashCode()、System.arraycopy()等基础方法;第10章讲解异常处理表与athrow指令;第11章追踪System类初始化与System.out.println()的执行过程,为全书收尾。每章代码都可独立编译运行,读者既能顺序实践,也能按需跳读。
编辑推荐
很多人学JVM,最后只记住“栈帧”“方法区”几个名词,遇到真实问题仍然说不出所以然。这本书的做法很直接:与其读代码,不如自己写一个。作者选择Go语言而非C++,避开了C++的复杂语法,又能用结构体和接口把复杂度压到可控范围;书中每一章都在上一章的基础上叠加功能,从读取class文件到跑通System.out.println(),读者能清楚看到一台虚拟机是怎样被一块块拼起来的。更适合把它当作“动手手册”:每章末尾都有测试代码,照着敲一遍比读三遍收获更大。全书篇幅精简,267页、14.4万字,节奏紧凑,适合有Java基础、想补齐底层认知的程序员作为第一个“造轮子”项目。
适合谁读
适合
- 具备Java基础、想真正理解字节码与JVM运行机制的后端开发者
- 希望用一个完整项目打通编译原理、类加载与解释器知识的程序员
- 想通过“造轮子”提升工程能力的中高级工程师
- 对Go语言有兴趣、希望以实战方式熟悉Go语法的读者
不适合
- 完全没有编程基础、也从未接触过Java的入门读者
- 只想速查JVM调优参数、不打算动手写代码的人
- 期待深入讲解垃圾回收算法与GC调优的读者
阅读建议
- 按章节顺序边读边敲,每章跑通测试代码后再进入下一章,避免只读不写
- 第3章解析class文件时,配合javap -v查看真实字节码,对照书中的结构体字段理解
- 第5章指令集内容较多,可先实现常用指令跑通小程序,再回头补齐其余指令
- 遇到不熟悉的Go语法先跳过,重点放在数据结构设计与虚拟机执行流程上
出版社简介
机械工业出版社
中国 · 成立于 1950 年
机械工业出版社(China Machine Press)在科技与专业出版之外,库内图书还体现出对心理学、计算机、管理、财经与社科等方向的持续关注。心理学方面收入荣格作品及分析心理学导论,并涉及压力与健康、成瘾与疗愈等应用议题;计算机领域有《计算机程序的构造和解释(JavaScript版)》;管理与财经类包括《管理行为(原书第4版)》《不平等的代价(珍藏版)》《这次不一样:八百年金融危机史(纪念版)》;科学哲学与科学史方面则有《世界观(原书第3版)》。相关作者资源涵盖C.G.荣格、威廉·麦圭尔、索努·沙姆达萨尼、加博尔·马泰等。公开资料有限,以上仅据库内图书归纳其出版面貌。
目录
- 前言
- 第1章 命令行工具
- 第2章 搜索class文件
- 第3章 解析class文件
- 第4章 运行时数据区
- 第5章 指令集和解释器
- 第6章 类和对象
- 第7章 方法调用和返回
- 第8章 数组和字符串
- 第9章 本地方法调用
- 第10章 异常处理
- 第11章 结束
- 附录 指令表
常见问题
这本书需要先学Go语言吗?
不需要系统学习。书中会简要介绍用到的Go语法及它与Java的差异,有C、C++、C#或Java等语言经验的读者基本能读懂源码;若要更顺畅,可先花半天了解Go的结构体、接口与包机制。
和《深入理解Java虚拟机》有什么区别?
《深入理解Java虚拟机》侧重讲解JVM规范、内存模型、垃圾回收与性能调优;本书则是一个动手项目,用Go从零实现一台能运行class文件的虚拟机,偏重“自己实现一遍”的体验,两者可以互补阅读。
这本书讲垃圾回收吗?
本书聚焦类路径搜索、class文件解析、运行时数据区、指令解释器、类加载与本地方法等实现环节,并未把垃圾回收算法与GC调优作为重点,想深入GC需另找专著。
跟着做能实现到什么程度?
按书中章节推进,最终可以运行包含数组、字符串、方法调用、异常处理以及System.out.println()等基础功能的Java程序,足以跑通经典小例子,但并非完整可用的生产级JVM。
书中的代码能直接运行吗?
每章代码都经过调整,除第1章外均建立在前一章基础上,同时每章又可单独编译运行;建议按版本对应下载或自行录入,并准备好JDK与Go环境,即可复现书中示例。
读者评论
查询本书
本站为索引目录:「全网查询」由您发起、在您的浏览器中运行,所列入口均指向第三方站点,请自行判断可用性。