码迷,mamicode.com
首页 > 其他好文 > 详细

虚拟机执行子系统

时间:2017-10-31 12:51:56      阅读:111      评论:0      收藏:0      [点我收藏+]

标签:索引   严格   方式   字符串   建立   class   二进制流   关联   命令   

类文件格式

大量建立在虚拟机之上的程序语言将编写的程序编译成二进制本地机器码(Native Code)已不再是唯一的选择,越来越多的程序语言选择了与操作系统和机器指令集无关的,平台中立的格式作为程序编译后的存储格式。

各种不同平台的虚拟机与所有平台都统一使用的程序存储格式--字节码(ByteCode)是构成平台无关性的基石。

实现语言无关性的基础仍然是虚拟机和字节码存储格式。Java虚拟机不和包括Java在内的任何语言绑定,它只与“Class文件”这种特定的二进制文件格式所关联,Class文件中包含了Java虚拟机指令集合符号表以及若干其他辅助信息。利用各种不同语言的编译器吧程序代码编译成Class文件,虚拟机并不关心Class的来源是何种语言。

技术分享

Java语言中的各种变量,关键字和运算符的语义最终都是由多条字节码命令组合而成的,因此字节码命令所能提供的语义描述能力肯定会比Java语言本身更加强大。因此,有一些Java语言本身无法有效支持的语言特性不代表字节码本身无法有效支持,这也为其他语言实现一些有别于Java的语言特性提供了基础。

class类文件的结构

 任何一个Class文件都对应着唯一一个类或接口的定义信息,但反过来说,类或接口并不一定都得定义在文件中(类或接口也可以通过类加载器直接生成)

Class文件是一组以8位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑排列在Class文件之中,中间没有添加任何分隔符,这使得整个Class文件中存储的内容几乎全部是程序运行的必要数据,没有空隙存在。当遇到需要占用8位字节以上空间的数据项时,则会按照高位在前的方式分割成若干个8位字节进行存储。

根据Java虚拟机规范中的规定,Class文件格式采用一种类似于C语言结构体的伪结构来存储数据,这种伪结构中只有两种数据类型:无符号数和表。

  • 无符号数属于基本的数据类型,以u1,u2,u4,u8来分别代表1字节,2字节,4字节,8字节的无符号数。可以用来描述数字,索引引用,数量值或安装UTF-8编码构成字符串值。
  • 表是由多个无符号数或其他表作为数据项构成的复合数据类型,所有表都习惯性地以“_info”结尾。表用于描述有层次关系的符合结构的数据,整个Class文件本质上就是一张表。

 

 

 

 

 

字节码指令

 

 

 

 

 

 

 

虚拟机类加载机制

 

 

 

 

虚拟机字节码执行引擎

 

 

参考资料

 

虚拟机执行子系统

标签:索引   严格   方式   字符串   建立   class   二进制流   关联   命令   

原文地址:http://www.cnblogs.com/lujiango/p/7760523.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!