深入学习JVM书单整理.基于R大书单.

  |   0 评论   |   3,021 浏览

JVM 书单

豆瓣地址: https://www.douban.com/doulist/2545443/


1.JVM与Java语言规范

这一节没有书推荐.
可以参考 oralce的官方文档: https://docs.oracle.com/javase/specs/index.html


2.虚拟机概论

书籍: Virtual Machines: Versatile Platforms for Systems and Processes 虚拟机(中译本) - 豆瓣

中文版本: http://www.ctfile.cn/archives/12458 (电子书) - [虚拟机系统与进程的通用平台].JAMES.E.SMITH等.扫描版.PDF

英文原版: 亚马逊 - Virtual Machines: Versatile Platforms for Systems and Processes (The Morgan Kaufmann Series in Computer Architecture and Design) 1st Edition

京东 - Virtual Machines, Versatile Platforms for Systems and Processes

other:
Versatile Platforms for Systems and Processes Virtual Machines
A volume in The Morgan Kaufmann Series in Computer Architecture and Design
Book • 2005

这里选取《Virtual Machines: Versatile Platforms for Systems and Processes》,帮助您了解“虚拟机”一词到底指代什么,有什么不同类型,大概有哪些实现方法,等等。读完这本书有助获得一个清晰的大局观。


3.为Java程序员从用户的角度介绍JVM的使用经验的几本书

书籍: 《Oracle JRockit: The Definitive Guide》 中文版本-豆瓣 英文版本

中译本:

购买链接: JRockit权威指南 深入理解JVM(图灵出品) - 京东自营

试读链接: 试读 - JRockit权威指南 深入理解JVM(图灵出品)

书籍: Java Performance 中译本 - 豆瓣

中译书:Java性能权威指南.pdf - github

试读: 京东读书 - Java性能权威指南

购买链接:Java性能权威指南(图灵出品)
学习笔记: 《Java性能权威指南》学习笔记

虽然这几本并没有深入到JVM实现的非常细节的角落,但对已经习惯用Java语言编程的程序员来说,有这么几本书带领自己从熟悉的领域进入不熟悉的领域总是件好事。
这几本书中,最深入JVM内部的是《Oracle JRockit: The Definitive Guide》;有丰富调优建议的是《Java Performance》;结合实现大概介绍JVM的抽象概念的是周志明的《深入理解Java虚拟机》


4.虚拟机的入门级实现

书籍: 《Language Implementation Patterns》 Language Implementation Patterns - 豆瓣 - 原版本

中译书: 编程语言实现模式.pdf - github

购买链接: 第三方书店 - 非直营

书籍: 《プログラミング言語を作る》(中文名:自制编程语言 ) 原版 - 日文版本 - 豆瓣中文译本 - 豆瓣

PDF: 自制编程语言.pdf

购买链接: 自制编程语言 - 京东

京东试读: 自制编程语言 - 试读

书籍: 深入嵌入式Java虚拟机
购买链接: 深入嵌入式Java虚拟机【正版书】 - 京东

书籍: HotSpot实战

购买链接: HotSpot实战

书籍: The School of Niklaus Wirth 豆瓣 - 原版(英)

购买链接: The School of Niklaus Wirth (贵原版 ,太贵. 先放弃吧)

先通过《Language Implementation Patterns》了解编程语言的一些入门级实现方式,把高级语言编译器与虚拟机两个概念联系起来。

然后通过《プログラミング言語を作る》了解非常简易的、用树遍历式以及字节码式解释器实现虚拟机大概是个怎么回事。虽然这本书没有实现JVM,但它介绍的Diksam与早期JVM的实现颇有相似之处,可参考。

接下来《深入嵌入式Java虚拟机》介绍了一种实际的JVM——KVM的实现细节。KVM是CLDC的参考实现(RI)里的JVM,结构简单,资源消耗小,适合入门阅读。

陈涛的《HotSpot实战》主要介绍了HotSpot VM的核心VM的实现。第一版的内容还不算深,介绍runtime的部分比较多,而介绍GC与动态编译器的具体实现的部分比较少。想对HotSpot VM的实现有初步了解,但担心GC与编译原理的知识太难的同学可以从这本书入手。
(不过请注意自己对着代码确实把知识消化掉,因为这个第一版的内容有不少小错误嗯…)

这部分最后是《The School of Niklaus Wirth》,里面有一章介绍了 HotSpot Client Compiler(C1) 的原始设计思路。这是个非常简单、但相对来说性能还不错的JIT编译器,可用于对JIT编译器的基本了解。这本书本身就很赞,不为学习虚拟机也可以一读。

需要注意的是从 “简易的JVM实现”“高性能、复杂的JVM实现” 跨度非常大;前者的许多部分的实现方式与后者相当不同。先从简易的实现开始入手主要是为了对JVM里大概都有些什么组件有所了解。但如果目标是了解高性能JVM的实现,那就必须在GC、编译原理方面打下更好的基础,重新洗一次脑。

5. C++基础书

下面要开始逐渐深入JVM的内部实现,如果没有良好的C或(与?)C++基础会比较吃力。虽然也有几乎完全用Java语言实现的高性能JVM,例如Maxine VM与Jikes RVM,但它们都是研究性质的;商用JVM实现仍然是C与C++的天下。

这里我先推荐C++之父自己写的那本书来入门。虽然BS巨巨后来还出过本新书,而近来也渐渐开始有介绍C++11的入门书,但实际上现在多数JVM实现用的还是C99或非常古老的C++(连C++03都不一定用到了),所以用这本老书应该就够了。
然后通过《深度探索C++对象模型》来学习C++对象模型的常见实现方式。这对后面理解Java对象模型的实现很有帮助。

书籍: **** 豆瓣 -01年版本
购买链接: 深度探索C++对象模型(博文视点出品) (好像已经买过了.先放着)

6. GC与编译原理的入门书

书籍: The Garbage Collection Handbook 豆瓣

PDF: The Garbage Collection Handbook PDF 下载

购买地址: 预订】The Garbage Collection Handbook - 京东

书籍: The Compiler Design Handbook The Compiler Design Handbook Optimizations and machine code generation 豆瓣

PDF: The.Compiler.Design.Handbook.pdf
可能的电子版本 - CSDN
我分享我找到的电子版本: 链接: https://pan.baidu.com/s/19Cj01vSv19s25Uol8DS1iQ 提取码: 8is6

购买地址: 【预订】The Compiler Design Handbook: - 京东 - 2000大洋

购买地址: 【预订】The Compiler Design Handbook: - amazon

书籍: Optimizing Compilers for Modern Architectures (中译名: 现代体系结构的优化编译器) 豆瓣
PDF(中文): 现代体系结构的优化编译器.pdf - github , 还有其它可用:https://github.com/anlongfei/compilerbook
PDF(原文): 暂时没有找到 - 已找到,感谢提供
购买链接:

GC书总共就那么几本,倒也没啥可挑的。《The Garbage Collection Handbook》是绝对必读。

编译原理的书就稍微尴尬些。现有的编译原理书大都针对静态编译器、针对像C或C++那样的偏静态、偏native的语言。我还没读到过什么编译原理书是专门介绍JIT编译器或者说动态编译器的。《The Compiler Design Handbook》(http://book.douban.com/subject/2333166/)算是有一章专门讲动态编译,不过也只是很入门的介绍。
静态与动态编译器会有些取舍上、实现策略上的差异,不过还好其核心的原理都是一样的,所以还是可以推荐几本书。龙书用来最初入门,鲸书用来补充一些优化相关的知识,EAC第二版用来学习编译器一种比较良好的逻辑组织方式,最后学一下针对现代机器的优化。《Optimizing Compilers for Modern Architectures》http://book.douban.com/subject/2126867/)是我比较喜欢的一本。

7. 介绍计算机体系结构的书

书籍: 《计算机组成及汇编语言原理》 卓拉 豆瓣

PDF: 《计算机组成及汇编语言原理》 卓拉

书籍: 《深入理解计算机系统》(CSAPP) 豆瓣 - 2nd - 英
PDF: 《深入理解计算机系统 - 第三版本 - CH》(CSAPP) - github

实际JVM实现里,如果有JIT编译器或者动态编译器那它们的编译目标多半是底层机器的机器码。这就涉及到计算机体系结构了。
如果您只对Java语言和抽象的JVM有一定了解,那可以用《计算机组成及汇编语言原理》来入门。这本书比较奇葩,用JVM的字节码指令集来当作真实机器介绍体系结构的概念。我并不太喜欢这本书,但感觉它对有Java背景的初学者来说应该有点用。要注意的是千万别只读这本书来入门,请结合CSAPP来重新洗一次脑。
如果对C或C++已经有所了解,那《深入理解计算机系统》(CSAPP)是计算机体系结构入门的最适合的书了。

  1. 进一步阅读

到此为止各种抽象概念应该都了解得差不多了。那么要在真实的机器上实现高性能JVM,就必须要对真实机器的指令集细节有所了解。x86/x86-64、SPARC、ARM、MIPS,要在哪个平台上做高性能实现就要学习哪个平台的指令集及指令级别优化技巧。这里就不具体推荐书了。

操作系统层面的知识同样重要。像是说JVM要实现线程、内存分配啥的,都可能要跟系统调用或CRT对系统调用的包装打交道。这部分也需要另外找书来读。我回头再考虑下要不要加几本道这个豆列里来。

另外,从80年代开始高级语言虚拟机的实现技术有了突飞猛进的发展,但却没有专门的书对这个领域做综述和导读。多数有用的资料其实还是在论文里。光靠读书是远远不够用的,论文这块也请关注。

顺便广告一下:我的博客里关于虚拟机的文章也推荐给大家阅读:http://rednaxelafx.iteye.com/blog/362738

=====================================

这个豆列没有漏掉《Inside the Java Virtual Machine, Second Edition》( http://book.douban.com/subject/1788390/ ,中文版《深入Java虚拟机(原书第2版)》,http://book.douban.com/subject/1138768/) ,只是我现在已经不再推荐它了。这本书刚出版的时候确实引起了一番学习Java虚拟机的热潮,但其部分内容从现在的角度看已经过时,特别是涉及JVM实现的部分。像火车算法什么的现在已经没有JVM实现使用。不过话说回来,了解了解这些过时的信息也没什么不好,前提是能自己分辨清楚哪些信息是适用于现在的JVM的,而哪些已经成为了历史。

另外有一本清华大学出版社出的《解析Java虚拟机开发——权衡优化.高效和安全的最优方案》(http://book.douban.com/subject/24757135/),这本纯粹是对周志明的《深入理解Java虚拟机》一书的抄袭;周志明与出版社对清华大学出版社的侵权行为提起的诉讼已经胜诉。然而抄袭也抄得很不给力,印刷、排版都不如原版。建议不要购买。

编译原理

编译原理三大经典:龙书 虎书 鲸书

书籍: 龙书(Dragon book):(原名: Compilers: Principles,Techniques,and Tools ) (中文名: 编译原理技术和工具) 豆瓣
龙书: 百度网盘 原地址

github - PDF

书籍: 虎书(Tiger book)(中文名: 现代编译原理-c语言描述)

PDF: 现代编译原理-c语言描述.pdf - github

书籍: 鲸书(Whale book)(原名:Advanced Compiler Design and Implementation )(中文名:高级编译器设计与实现 )
PDF: 高级编译器设计与实现.pdf - github

深入解析Java编译器 -源码剖析与实例详解
试读: 京东读书 - 试读
购买: 京东 - 深入解析Java编译器 -源码剖析与实例详解

深入剖析Java虚拟机:源码剖析与实例详解(基础卷)

购买: 试读
购买: 京东 - https://item.jd.com/12926187.html#none

其它:

阿里毕玄:推荐给Java程序员的7本好书
一些电子书资源集合

评论

发表评论


取消