【深入java虚拟机(2)】:class类文件结构-编程开发技术

【深入java虚拟机(2)】:class类文件结构-编程开发技术

ID:30776823

大小:201.33 KB

页数:13页

时间:2019-01-03

【深入java虚拟机(2)】:class类文件结构-编程开发技术_第1页
【深入java虚拟机(2)】:class类文件结构-编程开发技术_第2页
【深入java虚拟机(2)】:class类文件结构-编程开发技术_第3页
【深入java虚拟机(2)】:class类文件结构-编程开发技术_第4页
【深入java虚拟机(2)】:class类文件结构-编程开发技术_第5页
资源描述:

《【深入java虚拟机(2)】:class类文件结构-编程开发技术》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、【深入Java虚拟机(2)】:Class类文件结构-编程开发技术【深入Java虚拟机(2)]:Class类文件结构原文岀处:兰亭风雨平台无关性Java是与平台无关的语言,这得益于Java源代码编译后生成的存储字节码的文件,即Class文件,以及Java虚拟机的实现。不仅使用Java编译器可以把Java代码编译成存储字节码的Class文件,使用JRuby等其他语言的编译器也可以把程序代码编译成Class文件,虚拟机并不关心Class的来源是什么语言,只要它符合一定的结构,就可以在Java中运行。Java语言中的各种变量、关键字和运算符的语义最终都是市多条字节码命令组合

2、而成的,凶此字节码命令所能提供的语义描述能力肯定会比Java语言本身更强大,这便为其他语言实现一些有别于Java的语言特性提供了基础,而且这也正是在类加载时耍进行安全验证的原因。类文件结构???Class文件是一组以8位字节为基础单位的二进制流,各个数据项口严格按照顺序紧凑地排列在Class文件中,中间没冇添加任何分隔符,这使得整个Class文件中存储的内容几乎全部都是程序运行的必要数据。根据Java虚拟机规范的规定,Class文件格式釆用一种类似于C语言结构体的伪结构来存储,这种伪结构中只有两种数据类型:无符号数和表。无符号数属于基本数据类型,以ul、u2、nd.

3、迪来分别代表1、2、4、8个字节的无符号数。表是由多个无符号数或其他表作为数据项构成的符合数据类型,所冇的表都习惯性地以结尾。???整个Class文件本质上就是一张表,它由如下所示的数据项构成。???从表屮可以看出,无论是无符号数述是表,当需耍描述同一类型但数量不定的多个数据时,经常会使用一个前置的容量计数器加若干个连续的该数据项的形式,称这一系列连续的摸一个类型的数据为某一类型的集合,比如,fields_count个fieldjnfo表数据构成了字段表集合。这里需要说明的是:Class文件中的数据项,都是严格按照上表中的顺序和数量被严格限定的,每个字节代表的含义,

4、长度,先后顺序等都不允许改变。???下表列tBTClass文件中各个数据项的具体含义:类型名称数量U4magic1U2minor_version1U2major_version1U2constant_pool_count1cp_infoconstant_poolconstant_pool_countU2access_flags1U2this_dass1U2superclass1U2interfaces_count1U2interfacesinterfaces_countU2fields_count1fieldinfofieldsfields_countU2metho

5、ds_count1method_infomethodsmethods_countU2atrtributes_count1attribute」nfoatrtributesatrtributes_count??从表中可以看出,无论是无符号数还是表,当需要描述同一类型但数量不定的多个数据时,经常会在其前面使用一个前置的容量计数器来记录其数量,而便跟着若干个连续的数据项,称这-系列连续的某-类型的数据为某-类型的集合,如:fields_count个field_info表数据便组成了方法表集合。这里需要注意的是:Class文件小齐数据项是按照上表的顺序和数量被严格限定的,每个

6、字节代表的含义、长度、先后顺序都不允许改变。magic与version每个Class文件的头4个字节称为魔数(magic),它的唯一作用是判断该文件是否为一个能被虚拟机接受的Class文件。它的值固定为OxCAFEBABEo紧接着magic的4个字节存储的是Class文件的次版本号和主版本号,高版本的JDK能向下兼容低版本的Class文件,但不能运行更高版本的Class文件。conspoolmajor_version之后是常量池(constant_pool)的入口,它是Class文件中与其他项目关联最多的数据类型,也是占用Class文件空间最大的数据项目乙一。常量池

7、屮主要存放两大类常量:字而量和符号引用。字而量比较接近于Java层面的常量概念,如文本字符串、被声明为final的常量值等。而符号引用总结起来则包括了下面三类常量:•类和接口的全限定名(即带有包名的Class名,如:org.lxh.test.TestClass)•字段的名称和描述符(private>static等描述符)•方法的名称和描述符(private、static等描述符)虚拟机在加载Class文件时才会进行动态连接,也就是说,Class文件屮不会保存各个方法和字段的最终内存布局信息,因此,这些字段和方法的符号引用不经过转换是无法直接被虚拟机使用的。当虚拟

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

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

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