JVM 之 Class文件资料结构.doc

JVM 之 Class文件资料结构.doc

ID:56523267

大小:295.00 KB

页数:31页

时间:2020-06-27

JVM 之 Class文件资料结构.doc_第1页
JVM 之 Class文件资料结构.doc_第2页
JVM 之 Class文件资料结构.doc_第3页
JVM 之 Class文件资料结构.doc_第4页
JVM 之 Class文件资料结构.doc_第5页
资源描述:

《JVM 之 Class文件资料结构.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、JVM之Class文件结构本文写作目的:1)为了加深自己学习的理解,2)帮助正在学习研究JVM的,3)与任何热爱技术的达人交流经验,提升自己以此为本,文章会尽量写的简洁,尽量保证理解的正确性,如有任何理解不到位或错误的地方,希望朋友们及时指出,严厉拍砖。开始之前我们需要先了解一些基本的概念,这些概念是学习整个JVM原理的基础。1)JVM虚拟机规主要规了Class文件结构,虚拟机存结构,虚拟机加载,解析,执行Class文件的行为方式,以及一系列的字节码指令集。2)Class文件理论上说是一种数据结构,该数据结构有着严格的格式规,该

2、规在字节粒度上规定了组成该数据结构的格式标准。3)Class文件本质上是一组二进制字节流,是被JVM解析执行的数据源,每个字节都有着不同的含义,可能表示字符,数字,也可能表示执行某种操作的一个字节码指令。4)JVM(Java虚拟机)是解析执行Class文件的核心引擎,是整个Java系统的运行时环境,是跨平台的基石。5)我们的Java代码需要被编译器编译成完整,正确的Class文件才能被JVM正确的执行。6)编译器并非JVM的一部分,不同的语言可以提供不同的编译器,其作用是将该语言的代码编译为正确的Class文件,如Scala,J

3、Ruby等等。7)JVM是完全开放的跨平台的,只要你有能力你可以按照JVM虚拟机规编写自己的编程语言。8)JVM使得Java的跨平台成为可能,那么Class文件结构规则使得更多的编程语言运行在JVM上成为可能。既然Class文件是一种数据结构,那么到底是什么样的数据结构呢?通常计算机中的文件都包含元数据和实体数据两部分,元数据用来存储该文件的描述信息,实体数据来存放用于表达文件真实容的数据。当然Class文件也不例外,我们为了便于理解,也将class文件的结构分为两大部分:元数据和实体数据(注:非规定义,只是为了方便理解进行的自

4、定义)。元数据:包含了Class文件的魔术数(标识符)和版本信息。实体数据:包含了常量池,字段描述,方法描述,属性描述等用于表述该类行为的具体信息。元数据我们不多赘述对我们后面的分析没多大关系,下面主要分析下实体数据。一,结构概览不管是元数据还是实体数据他们都以字节为单位按顺序紧凑的排列在class文件中,没有任何多余空间。为了描述class文件结构,虚拟机规定义了u1,u2,u4,u8四种基本数据结构和一种由这四种基本数据结构组成的复杂数据结构-表(通常以info结尾表示),这四种基本数据结构分别表示一个字节,两个字节,四个字

5、节,八个字节。基于此我们便可以清晰的了解class文件结构的总体轮廓了(C语言语法,其中常量表,变量表,方法表,属性表都有一到多个,因此定义为数组),如<<代码一>>?123456789101112131415class-file {    u4             magic;//魔术数    u2             minor_version;//小版本号    u2             major_version;//大版本号    u2             constant_pool_count;//常

6、量池中常量个数+1    cp_info        constant_pool[constant_pool_count-1];//常量池    u2             access_flags;//类的访问控制符标识(public,static,final,abstract等)    u2             this_class;//该类的描述(值为对常量池的引用,引用的值为CONSTANT_Class_info)    u2             super_class;//父类的描述(值为对常量池的引用,引

7、用的值为CONSTANT_Class_info)    u2             interfaces_count;//接口数量    u2             interfaces[interfaces_count];//接口的描述(每个都是对常量池的引用)    u2             fields_count;//变量数,包括该类中或接口中类变量和实例变量161718    field_info     fields[fields_count];//变量表集合    u2             method

8、s_count;//方法数,包括该类中或接口中定义的所有方法    method_info    methods[methods_count];//方法表集合    u2             attributes_count;//属性数,包括InnerCla

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。