自己动手写Java虚拟机 封面

自己动手写Java虚拟机

评分 4.1
字数
22.3万字
章节数
13
丛书
自己动手系列
ISBN
9787111534136

标签

内容简介

本书是一本以动手实践为主线讲解 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. 务必边读边敲代码:先跑通当章示例,再尝试自己改一处逻辑并重新测试
  2. 从第1章顺序推进,每章结束确认“上一章功能仍能运行”,避免后期调试无从下手
  3. 遇到看不懂的类名或指令时,翻阅书末附录的指令表并对照《Java虚拟机规范》原文
  4. 读完可换用 Java 或 Rust 重写其中几章,检验自己是否真的理解了机制而非记住了代码

出版社简介

机械工业出版社 中国 · 成立于 1950 年

机械工业出版社(China Machine Press)在科技与专业出版之外,库内图书还体现出对心理学、计算机、管理、财经与社科等方向的持续关注。心理学方面收入荣格作品及分析心理学导论,并涉及压力与健康、成瘾与疗愈等应用议题;计算机领域有《计算机程序的构造和解释(JavaScript版)》;管理与财经类包括《管理行为(原书第4版)》《不平等的代价(珍藏版)》《这次不一样:八百年金融危机史(纪念版)》;科学哲学与科学史方面则有《世界观(原书第3版)》。相关作者资源涵盖C.G.荣格、威廉·麦圭尔、索努·沙姆达萨尼、加博尔·马泰等。公开资料有限,以上仅据库内图书归纳其出版面貌。

目录

  1. 前言
  2. 第1章 命令行工具
  3. 第2章 搜索class文件
  4. 第3章 解析class文件
  5. 第4章 运行时数据区
  6. 第5章 指令集和解释器
  7. 第6章 类和对象
  8. 第7章 方法调用和返回
  9. 第8章 数组和字符串
  10. 第9章 本地方法调用
  11. 第10章 异常处理
  12. 第11章 结束
  13. 附录 指令表

常见问题

这本书用什么语言实现 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,建议先积累一定开发经验,再回头读本书会顺利得多。

读者评论

查询本书

本站为索引目录:「全网查询」由您发起、在您的浏览器中运行,所列入口均指向第三方站点,请自行判断可用性。

同一作者

同类高分