- 浏览: 159302 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
追求幸福:
每增加一个新的activity, 都要为这个activity指 ...
关于setContentView -
雨过天晴0521:
感谢第一位留言的网友, 我会坚持下去
ADB push的用法 -
小光棍:
謝謝。整理出來的東西真有用!!
ADB push的用法
在社会化分工、软件行业细分专业化的趋势下,会真的参与到底层系统实现的人肯定是越来越少(比例上说)。真的会参与到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是如何实现的有兴趣、充满好奇,却苦于没有足够系统的知识去深入,那么这个豆列就是为您打好基础而准备的。
如果只想用用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的,而哪些已经成为了历史。
发表评论
-
(转)linux防火墙的启动和关闭
2013-08-29 14:14 640昨天在linux服务器上装了一个tomcat,整个过程很顺利, ... -
(转)linux下如何更改主机名
2013-08-16 18:50 983如何修改linux主机名才能生效? 很多人使用hostnam ... -
(转)如何查看linux闲置和占用的内存
2013-08-07 16:33 741在Linux下查看内存我们一般用free命令, 也可以加-m参 ... -
win7下安装cygwin
2013-08-06 15:56 17421.win7 64bit也要下载32bit的setup-x86 ... -
yum install 安装失败
2013-08-06 12:44 1834问题1:今天运行oracle11g ... -
(转) Linux Increase The Maximum Number Of Open Files
2013-03-28 19:18 871Issue: How do I set the maximu ... -
(转)如何让让Linux下程序永远在后台执行
2013-02-28 11:29 916Unix/Linux下一般想让某个程序在后台运行,很多都是使用 ... -
常用linux命令收集
2013-02-18 14:35 6951.(转)如何修改linux主机名? 用hostname命令 ... -
[转]How to determine the exit status of Linux and UNIX command
2012-12-01 21:36 799Shell: How to determine the exi ... -
如何查看父进程
2012-11-01 15:17 1706看父进程PPID和子进程PID [root@silver-i ... -
(转)Solaris 10 常用命令
2012-09-20 16:12 1346如何查看当前在线用户? 可以使用who和finger显示当前 ... -
Linux 常用网络命令介绍
2012-05-31 15:26 87今天在安装完vsphere后配置centOS虚拟机, 安装 ... -
如何查看Linux的版本位数
2012-03-06 11:35 1148方法1. getconf LONG_BIT and getco ... -
[转]CPU位数、操作系统位数和编译器位数关系
2011-09-22 09:58 1006随着近来AMD和Intel的64位CPU以及 Microsof ... -
如何判断Solaris和SolarisX86是运行在32位还是64位模式下
2011-09-21 17:53 1169-bash-3.00$ man isainfo Reforma ... -
sed替换properties文件的值
2011-09-01 20:16 2910oracle9.properties文件内容如下, 想要将us ... -
自动化安装和启动DS脚本
2011-08-10 18:31 1014#!/bin/sh #fabric broker pat ... -
执行*.sh时出现bad interpreter错误
2011-08-04 11:57 857出现bad interpreter:No such f ...
相关推荐
每个使用Java的开发者都知道Java字节码是在JRE中运行,而JVM则是JRE中的核心组成部分,承担分析和执行Java字节码的工作,而Java程序员通常并不需要深入了解JVM运行情况就可以开发出大型应用和类库。尽管如此,如果你...
了解JVM内存管理和G1 GC的工作原理,对于优化Java应用程序性能、避免内存溢出等问题至关重要。开发者可以通过调整JVM参数,如设置年轻代与老年代的比例、分配的Region数量、暂停时间目标等,来优化G1 GC的行为,从而...
了解这些组件各自的作用和工作方式,是理解JVM运行机制的基础。 2. 类加载机制:Java类文件在被JVM执行之前,需要通过类加载器加载到内存中。类加载器采用双亲委派模型来完成类的加载。类加载过程涉及加载、验证、...
深入了解JVM 共60课 (质量超高)
深入理解JVM,深入理解JVM一本可以帮助开发者深入了解jvm的经典书籍
深入了解JVM对于Java开发者来说至关重要。通过掌握JVM的工作原理和技术细节,开发者不仅能够编写出更加高效、安全的代码,还能更好地解决程序运行过程中出现的问题。随着技术的发展,JVM也在不断地演进和完善,以...
通过对“圣思园张龙 深入理解jvm”的内容进行梳理,我们了解到Java虚拟机作为Java技术体系的重要组成部分,在软件开发中扮演着极其重要的角色。掌握其内部工作原理和优化技巧对于提升Java应用程序的性能至关重要。...
《深入了解JVM(Inside Java Virtual Machine)》是一篇深度探讨Java虚拟机的博客文章,作者通过分享自己的理解和实践,帮助读者揭开JVM的神秘面纱。这篇文章主要涵盖了以下几个关键知识点: 1. **JVM概述**:Java...
Java虚拟机(JVM)是运行Java程序的关键平台,其内部结构和内存管理机制非常复杂且精细。它将内存分为若干个不同的数据区域...了解这些知识点对于Java开发者来说至关重要,有助于编写出更加高效、稳定的Java应用程序。
《深入理解Java虚拟机》是Java开发者提升技术深度的重要参考资料,尤其对于想要深入了解JVM机制的程序员来说,这本书无疑是一本宝贵的宝典。周志明的这部作品详细地阐述了JVM的工作原理,涵盖了许多关键知识点,让...
本书讲述了Java虚拟机一运行 所有Java程序的抽象计算机,还讲了几种与虚拟机密切相关的核心Java API。本书通过分析讲解、可运行的示例、参考资料和applet (它作为文中所述概念的交互式例示),提供了Java技术的深人...
《深入理解JVM & G1 GC》这篇文章和相关压缩包文件主要聚焦于Java虚拟机(JVM)的内存管理,特别是垃圾收集器(GC)的优化,特别是G1(Garbage-First)垃圾收集器的深度解析。下面将详细阐述JVM、GC的基本概念,...
本教程旨在帮助开发者深入了解JVM的工作原理及其内部机制,掌握JVM调优的方法和技术。通过学习本教程,开发者不仅能够提高自己的技术水平,还能更好地应对实际工作中遇到的问题。希望各位能够在学习过程中不断探索、...
Java虚拟机(JVM)是Java程序的核心组件,它...了解JVM的工作原理和特性,对于优化性能、排查问题以及编写高效Java代码至关重要。深入理解JVM,可以帮助开发者更好地应对各种运行时问题,提升应用程序的稳定性和效率。
1. **JVM结构与原理**:首先,我们需了解JVM的基本架构,包括类装载器、运行时数据区、执行引擎、本地方法接口和本地库。特别是堆内存、栈内存、方法区(元空间)以及垃圾收集机制,它们是理解JVM运行时行为的关键。...