标签
内容简介
本书是一本以动手实践为主线讲解 Java 虚拟机的技术书。作者认为,JVM 的结构与运行机制虽然复杂,但仅靠阅读规范文档或钻研 OpenJDK 等大型虚拟机源码,初学者容易被海量代码细节淹没;更好的路径是自己从零写出一个可运行的小型虚拟机。全书采用 Go 语言作为实现语言,因为 Go 语法接近 C 又更简洁,内置丰富的基本类型并支持结构体,同时不支持指针运算,代码比 C 更安全,适合作为教学载体。 全书共 11 章,基本按 Java 程序被执行的顺序推进:先实现一个能解析命令行参数的 java 命令入口,再实现类路径搜索(目录、JAR/ZIP、通配符与组合路径),接着逐字节解析 class 文件中的魔数、版本号、常量池、字段与方法表和各类属性;随后搭建运行时数据区,包括线程、虚拟机栈、帧、局部变量表与操作数栈。中段进入指令集与解释器,按类别实现常量、加载、存储、栈、数学、类型转换、比较、控制跳转与扩展指令,并完成取指—解码—执行的解释循环。后段依次实现方法区、运行时常量池、类加载器与符号引用解析,new/putstatic/getfield 等类和对象相关指令,静态、特殊、虚方法与接口方法调用及返回,数组类与字符串池,本地方法注册与调用以及反射的基本支持,最后以异常处理表与 athrow 指令收尾,并剖析 System 类的初始化和 System.out.println 的执行路径。书末附有指令表,便于对照查阅。
编辑推荐
读 JVM 的书很多,能让你亲手写出一个 JVM 的书很少。《深入理解Java虚拟机》解决的是“JVM 是怎么设计的”,这本书解决的则是“如果让我来实现,每一行代码该怎么写”。作者刻意绕开了阅读 OpenJDK 源码这条容易让人陷进代码海洋的路,改用 Go 语言从零搭建,每一章都在前一章的基础上多跑通一点功能:从能打印命令行参数,到能解析 class 文件,再到能执行方法调用、数组、字符串和异常。这种“能力逐步增长”的节奏,是本书最舒服的地方——你能清楚看到自己写的虚拟机又多会了一件事。 全书篇幅克制,章节与代码一一对应,每章末尾都有测试环节,可以单独编译运行,所以不必从头读到尾。它对 Go 的要求也不高,书中会简要交代语法差异,有 C 系语言经验的读者基本能读懂。对于想把 JVM 从“八股知识”变成“手上功夫”的 Java 开发者,这是性价比很高的一本实战手册。需要提醒的是,它讲的是解释执行的核心机制,不覆盖 JIT 编译、GC 调优等生产级特性,定位应当摆正。
适合谁读
适合
- 已掌握 Java 基础、想真正弄懂 class 文件与字节码执行过程的开发者
- 读过《深入理解Java虚拟机》等理论书、希望动手验证其中概念的读者
- 准备面试 JVM 相关岗位、需要把知识点串成实现逻辑的人
- 会 Go 或 C 系语言、对虚拟机与解释器实现感兴趣的技术爱好者
不适合
- 完全没有编程经验、尚未写过 Java 程序的入门者
- 想系统学习垃圾回收、JIT 编译与线上性能调优的读者
- 只想要一份可直接用于生产环境的 JVM 实现代码的工程师
阅读建议
- 务必边读边敲代码:先跑通当章示例,再尝试自己改一处逻辑并重新测试
- 从第1章顺序推进,每章结束确认“上一章功能仍能运行”,避免后期调试无从下手
- 遇到看不懂的类名或指令时,翻阅书末附录的指令表并对照《Java虚拟机规范》原文
- 读完可换用 Java 或 Rust 重写其中几章,检验自己是否真的理解了机制而非记住了代码
出版社简介
机械工业出版社
中国 · 成立于 1950 年
机械工业出版社(China Machine Press)在科技与专业出版之外,库内图书还体现出对心理学、计算机、管理、财经与社科等方向的持续关注。心理学方面收入荣格作品及分析心理学导论,并涉及压力与健康、成瘾与疗愈等应用议题;计算机领域有《计算机程序的构造和解释(JavaScript版)》;管理与财经类包括《管理行为(原书第4版)》《不平等的代价(珍藏版)》《这次不一样:八百年金融危机史(纪念版)》;科学哲学与科学史方面则有《世界观(原书第3版)》。相关作者资源涵盖C.G.荣格、威廉·麦圭尔、索努·沙姆达萨尼、加博尔·马泰等。公开资料有限,以上仅据库内图书归纳其出版面貌。
目录
- 前言
- 第1章 命令行工具
- 第2章 搜索class文件
- 第3章 解析class文件
- 第4章 运行时数据区
- 第5章 指令集和解释器
- 第6章 类和对象
- 第7章 方法调用和返回
- 第8章 数组和字符串
- 第9章 本地方法调用
- 第10章 异常处理
- 第11章 结束
- 附录 指令表
常见问题
这本书用什么语言实现 Java 虚拟机?需要先学 Go 吗?
全书用 Go 语言实现。书中会简要介绍涉及的 Go 语法及其与 Java 的区别,有 C、C++、Java 等语言经验即可读懂,不必事先系统学习 Go;若完全没接触过 Go,建议先花一两天熟悉其基本语法与结构体。
和《深入理解Java虚拟机》有什么区别?
《深入理解Java虚拟机》侧重讲解 JVM 的内存结构、类加载与 GC 等机制的“是什么和为什么”,本书则从零手写一个简易虚拟机,回答“怎么实现”。两书互补:先读理论书建立框架,再用本书验证细节效果更好。
书中的代码能跑起来吗?需要什么环境?
作者为本书提供了配套的开源代码,按章节划分,每章可单独编译运行。需要安装 JDK 和 Go 环境并准备好待执行的 class 文件;由于出版于 2016 年,若使用较新版本的 JDK,建议以书中说明的版本行为为准,必要时用较老的 JDK 编译测试用的 class 文件。
书中实现的虚拟机支持哪些功能?
大致覆盖 class 文件解析、运行时数据区、常用字节码指令与解释执行、类的加载与对象创建、方法调用与返回、数组与字符串、部分本地方法与反射、异常处理等核心机制;不涉及 JIT 编译、分代垃圾回收等生产级优化特性。
这本书适合零基础读者吗?
不太适合。阅读需要具备 Java 语言基础,最好已理解编译、类型、方法调用等概念,并对字节码有初步印象。若完全没写过 Java,建议先积累一定开发经验,再回头读本书会顺利得多。
读者评论
查询本书
本站为索引目录:「全网查询」由您发起、在您的浏览器中运行,所列入口均指向第三方站点,请自行判断可用性。