《Java平台体系》——第二章 JVM——JVM规范(JSR924)
2012-07-10 21:33
232 查看
JVM规范的提出是实现Java“一次编译,随处运行”承诺的关键环节,正所谓“不成规矩,无以成方圆”,无论JVM的具体实现如何,但站在JVM之上的应用看到的都是一致的“接口”,即JVM规范。
查看大图
JVM规范JSR编号是924,官方地址http://www.jcp.org/en/jsr/detail?id=924。随后的更新在JSR202
http://www.jcp.org/en/jsr/detail?id=202中维护。
---------------------------------------------------------------------------------------
JCP(JAVA COMMUNITY PROCESS)是JAVA的标准制定组织,由JAVA的重量级开发者和被授权的组织组成,JCP维护的规范都简称JSR,并且每个规范都会有一个编号,JAVA几乎所有的内容都有其对应的JSR。
---------------------------------------------------------------------------------------
在了解JVM规范之前我们先从系统输入输出角度看看JVM的职能(抽象层面):
查看大图
JVM的输入是被称为Java字节码的中间码(在文件命名上通常以.class为后缀,即Java源文件编译之后的文件),输出是机器指令集。如果我们通俗的理解JVM的主要职能就是负责将Java字节码翻译成机器指令。
----------------------------------------------------------------------------------------
为什么不直接从Java源文件(在文件命名上通常以.java为后缀)编译成机器码呢?首先这个问题的回答是:可以这么做,,例如GCJ(http://gcc.gnu.org/java/ )、JNC(http://jnc.mtsystems.ch)等工具就可以把Java直接编译成系统可执行程序。以前大家攻击Java速度和C有差距的主要问题就在于JVM这个环节。要谈引入JVM理由的话,我还是回到什么是虚拟机部分的内容,请读者自行思考。
----------------------------------------------------------------------------------------
还是发扬本书的精神,给大家引入一些机器指令的相关知识:
我们经常看到的可执行程序(例如Windows上的exe[PE格式]和Linux上的ELF格式)与机器直接可执行的机器指令(例如引导盘主引导区中的程序)之间是有很大差别的,前者脱离操作系统是不能执行的,后者没有操作系统是可以执行的。换句话来说,PE和ELF格式需要操作系统进行翻译才能有效连接成机器指令,但最终和CPU打交道的还是机器指令。机器指令在语义层面通过一套被称作指令集(Instruction Set)的东东进行约定,更专业的称呼为ISA(Instruction
Set Architecture)。计算机架构(Computer Architecture)至少应该包括ISA、微架构(Microarchitecture)和系统设计(System Design)。其中ISA是围绕微架构制定的,而在微架构层面各个CPU厂商在语义层面基本保持一致,换句话来说大多数的ISA应该是具有相同的语义的,只是CPU内部的实现有所区别,但各个CPU之间还是有差别的,大家可以参考文章http://www.agner.org/optimize/microarchitecture.pdf
The microarchitecture of Intel, AMD and VIA CPUs(Intel,AMD和VIA的微架构)。
查看大图
JVM规范JSR编号是924,官方地址http://www.jcp.org/en/jsr/detail?id=924。随后的更新在JSR202
http://www.jcp.org/en/jsr/detail?id=202中维护。
---------------------------------------------------------------------------------------
JCP(JAVA COMMUNITY PROCESS)是JAVA的标准制定组织,由JAVA的重量级开发者和被授权的组织组成,JCP维护的规范都简称JSR,并且每个规范都会有一个编号,JAVA几乎所有的内容都有其对应的JSR。
---------------------------------------------------------------------------------------
在了解JVM规范之前我们先从系统输入输出角度看看JVM的职能(抽象层面):
查看大图
JVM的输入是被称为Java字节码的中间码(在文件命名上通常以.class为后缀,即Java源文件编译之后的文件),输出是机器指令集。如果我们通俗的理解JVM的主要职能就是负责将Java字节码翻译成机器指令。
----------------------------------------------------------------------------------------
为什么不直接从Java源文件(在文件命名上通常以.java为后缀)编译成机器码呢?首先这个问题的回答是:可以这么做,,例如GCJ(http://gcc.gnu.org/java/ )、JNC(http://jnc.mtsystems.ch)等工具就可以把Java直接编译成系统可执行程序。以前大家攻击Java速度和C有差距的主要问题就在于JVM这个环节。要谈引入JVM理由的话,我还是回到什么是虚拟机部分的内容,请读者自行思考。
----------------------------------------------------------------------------------------
还是发扬本书的精神,给大家引入一些机器指令的相关知识:
我们经常看到的可执行程序(例如Windows上的exe[PE格式]和Linux上的ELF格式)与机器直接可执行的机器指令(例如引导盘主引导区中的程序)之间是有很大差别的,前者脱离操作系统是不能执行的,后者没有操作系统是可以执行的。换句话来说,PE和ELF格式需要操作系统进行翻译才能有效连接成机器指令,但最终和CPU打交道的还是机器指令。机器指令在语义层面通过一套被称作指令集(Instruction Set)的东东进行约定,更专业的称呼为ISA(Instruction
Set Architecture)。计算机架构(Computer Architecture)至少应该包括ISA、微架构(Microarchitecture)和系统设计(System Design)。其中ISA是围绕微架构制定的,而在微架构层面各个CPU厂商在语义层面基本保持一致,换句话来说大多数的ISA应该是具有相同的语义的,只是CPU内部的实现有所区别,但各个CPU之间还是有差别的,大家可以参考文章http://www.agner.org/optimize/microarchitecture.pdf
The microarchitecture of Intel, AMD and VIA CPUs(Intel,AMD和VIA的微架构)。
相关文章推荐
- 《Java平台体系》——第二章 JVM——JVM规范(JSR924)
- 《Java平台体系》——第二章 JVM——Java字节码类文件格式
- 《Java平台体系》——第二章 JVM——什么是虚拟机?
- 《Java平台体系》——第二章 JVM——JVM实现中的多线程
- 《Java平台体系》——第二章 JVM——JVM指令集
- 《Java平台体系》——第二章 JVM——Java字节码程序的执行过程
- 《Java平台体系》——第二章 JVM——JNI(Java本地接口)
- 《Java平台体系》——第二章 JVM——JVM抽象架构
- 《Java平台体系》——第二章 JVM——从JVM指令到机器指令
- 《Java平台体系》——第二章 JVM——实战:用JBE修改Java字节码
- 《Java平台体系》——第二章 JVM——实战:ClassLoader的应用
- 《Java平台体系》——第二章 JVM——Java字节码类文件格式
- 《Java平台体系》——第二章 JVM——实战:Java调用本地代码的例子
- 《Java平台体系》——第二章 JVM——Java字节码类文件格式
- 《Java平台体系》——第二章 JVM——JVM指令集
- 《Java平台体系》——第二章 JVM——实战:本地库调用JVM和Java代码例子
- 《Java平台体系》——第二章 JVM——JVM抽象架构
- 《Java平台体系》——第二章 JVM——JVM实现:内存管理和垃圾回收
- 《Java平台体系》——第二章 JVM——实战:ClassLoader的应用
- 《Java平台体系》——第二章 JVM——什么是虚拟机?