`
雨过天晴0521
  • 浏览: 155021 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

(转) 深入了解JVM

 
阅读更多
在社会化分工、软件行业细分专业化的趋势下,会真的参与到底层系统实现的人肯定是越来越少(比例上说)。真的会参与到JVM实现的人肯定是少数。

但如果您对JVM是如何实现的有兴趣、充满好奇,却苦于没有足够系统的知识去深入,那么这个豆列就是为您打好基础而准备的。

如果只想用用Java用用JVM,对深入到实现细节无甚兴趣的话,这个豆列就请不必参考了,免得浪费钱浪费时间精力,呵呵 :-)

本豆列的脉络是:

1. JVM与Java语言规范

要了解JVM是如何实现的,首先必须要知道JVM到底是什么、不是什么,表面上应该提供怎样的功能。为此,JVM规范必读,而且应该时常放在手边参考。

而JVM的主要服务对象是Java编程语言。虽然JVM也可以支持众多其它语言,但JVM里的“J”仍然最重要,Java的语言特性影响了JVM的原始设计,所以Java语言规范也应该阅读。特别是,JVM关于线程和同步相关的规定都是交由Java语言规范的相关章节定义的。

2. 虚拟机概论

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

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

虽然这几本并没有深入到JVM实现的非常细节的角落,但对已经习惯用Java语言编程的程序员来说,有这么几本书带领自己从熟悉的领域进入不熟悉的领域总是件好事。

这几本书中,最深入JVM内部的是《Oracle JRockit: The Definitive Guide》;有丰富调优建议的是《Java Performance》;结合实现大概介绍JVM的抽象概念的是周志明的《深入理解Java虚拟机》。

4. 虚拟机的入门级实现

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

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

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

这部分最后是《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对象模型的实现很有帮助。

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

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

编译原理的书就稍微尴尬些。现有的编译原理书大都针对静态编译器、针对像C或C++那样的偏静态、偏native的语言。我还没读到过什么编译原理书是专门介绍JIT编译器或者说动态编译器的。静态与动态编译器会有些取舍上、实现策略上的差异,不过还好其核心的原理都是一样的,所以还是可以推荐几本书。龙书用来最初入门,鲸书用来补充一些优化相关的知识,EAC第二版用来学习编译器一种比较良好的逻辑组织方式,最后学一下针对现代机器的优化。

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

实际JVM实现里,如果有JIT编译器或者动态编译器那它们的编译目标多半是底层机器的机器码。这就涉及到计算机体系结构了。

如果您只对Java语言和抽象的JVM有一定了解,那可以用《计算机组成及汇编语言原理》来入门。这本书比较奇葩,用JVM的字节码指令集来当作真实机器介绍体系结构的概念。我并不太喜欢这本书,但感觉它对有Java背景的初学者来说应该有点用。要注意的是千万别只读这本书来入门,请结合CSAPP来重新洗一次脑。

如果对C或C++已经有所了解,那《深入理解计算机系统》(CSAPP)是计算机体系结构入门的最适合的书了。

8. 进一步阅读

到此为止各种抽象概念应该都了解得差不多了。那么要在真实的机器上实现高性能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的,而哪些已经成为了历史。
分享到:
评论

相关推荐

    深入理解JVM.rar

    每个使用Java的开发者都知道Java字节码是在JRE中运行,而JVM则是JRE中的核心组成部分,承担分析和执行Java字节码的工作,而Java程序员通常并不需要深入了解JVM运行情况就可以开发出大型应用和类库。尽管如此,如果你...

    深入了解JVM 共60课

    深入了解JVM 共60课 (质量超高)

    深入理解jvm

    深入理解JVM,深入理解JVM一本可以帮助开发者深入了解jvm的经典书籍

    深入JVM 中文版(pdg)

    Inside Java Virtual Machine 中文版pdg版本 想深入了解JVM的必备书籍,欢迎下载 想深入了解JVM的必备书籍,欢迎下载 想深入了解JVM的必备书籍,欢迎下载 想深入了解JVM的必备书籍,欢迎下载

    深入jvm虚拟机

    本书讲述了Java虚拟机一运行 所有Java程序的抽象计算机,还讲了几种与虚拟机密切相关的核心Java API。本书通过分析讲解、可运行的示例、参考资料和applet (它作为文中所述概念的交互式例示),提供了Java技术的深人...

    深入JVM.pdf

    本书深入详细地介绍了java体系结构及其内部细节,了解这些内容才能更快速地编写更搞笑的程序!理解了Java虚拟机,深入细致地了解了Java技术的底层,才能使自己的程序成分发挥Java技术的优势!

    jvm 深入java虚拟机 视频教程

    深入了解jvm,理解java虚拟机底层实现。是一个很不错的额视频教程

    深入理解Java虚拟机.rar_JAVA虚拟机_java_深入理解JVM:pdf_深入理解Java_深入理解jvm

    了解jvm的pdf,高清pdf,希望大家下载

    深入理解JVM内存结构及运行原理全套视频加资料.txt

    JVM是Java知识体系中的重要部分,对JVM底层的了解是每一位Java程序员深入Java技术领域的重要因素。本课程试图通过简单易懂的方式,系统的深入讲解JVM相关知识。包括JVM执行过程、虚拟机类加载机制、运行时数据区、GC...

    深入了解jvm(Inside java virture machine)

    博文链接:https://liudaoru.iteye.com/blog/211768

    深入理解JVM内存结构及运行原理全套视频加资料

    JVM是Java知识体系中的重要部分,对JVM底层的了解是每一位Java程序员深入Java技术领域的重要因素。本课程试图通过简单易懂的方式,系统的深入讲解JVM相关知识。包括JVM执行过程、虚拟机类加载机制、运行时数据区、GC...

    深入了解JVM,Java 开发的需要深读

    JVM 详解 PDF ,面向Java开发者需要提升的伙计们, 有需要的下载

    全面了解JVM组成底层工作原理以及数据结构

    JVM介绍入门到深入,通过全面了解JVM组成底层工作原理以及数据结构,在今后JVM深入分析中全面提升运行性能

    jvm详解,深入了解java

    jvm详解,深入了解java,深入学习java的材料。

    深入JVM笔记word版

    深入JVM截取的一些自己认为需要了解,外加一些博客链接,还有转载的一些。不是本人所写,因为是自己看的,想着方便下大家,有些忘记转载的那篇啦,没有写转载作者,先抱歉下,不行我删除

    java JVM 详解

    Java JVM详解要深入了解JVM的可以看下

Global site tag (gtag.js) - Google Analytics