JVM_12_Class文件结构
来源:互联网 发布:合肥晨飞网络 编辑:程序博客网 时间:2024/06/13 05:53
类文件结构
参考资料:
《Java Class文件结构解析 及 实例分析验证》
还记得那个小故事嘛?在看这个之前,你可以回顾下《JVM_0.5_小故事》
学习了解Class文件的数据结构是了解虚拟机的重要基础之一。
这方面的学习会比较枯燥,so,来吧...
Class文件是JVM执行引擎的入口,也是Java技术体系的基础构成之一;
了解Class文件的结构对后面进一步了解JVM执行引擎有很重要的意义;
说在前面,这小节了解就好..不用过于深究..挑重点看看..
Class文件概述
两种常见的程序编译存储文件格式分类:
1. 编译成"0,1,0,1...."二进制格式的存储机器码文件格式,直接运行在操作系统上。
2. 编译成与操作系统和机器指令集无关的格式作为存储文件格式,运行在隔离硬件平台的虚拟机之上。
C/C++ 编译出来的程序属于第一种,而Class文件属于第二种;
什么是Class文件?
Class文件是经过前端编译(例如Javac编译)后生成的文件(以.class为后缀),一个Class文件对应一个类或一个接口。
Class文件存储的内容称为字节码(ByteCode),包含了JVM指令集和符号表以及若干其他辅助信息。
JVM规范定义了Class文件结构格式,每种JVM实现必须满足规范定义,这样JVM实例才能加载Class文件,运行字节码内容。
但JVM的实现可以在JVM规范的约束下对具体实现做出修改和优化。
从数据类型来看,Class文件是一组以8位字节(8-bit bytes)为基础的二进制字节流构成,8位以上的数据以大端(Big-Endian)高位在前的顺序进行存储,中间没有添加任何分隔符。
从文件形式来看,JVM加载的Class文件不一定来自磁盘,还可能来自网络数据,甚至在运行时直接编译代码字符串生成。
Class文件的作用(优点)是什么?
JVM规范定义Class文件格式来存储字节码,是虚拟机实现 平台无关性、语言无关性的关键
平台无关性
Java语言有"一次编写,到处运行(Write Once , Run Anywhere)"特性。
通过针对不同平台实现的虚拟机作为字节码执行引擎,它在多种操作系统和架构上提供Java运行时环境。
语言无关性
虚拟机只与字节码关联,不与任何语言绑定。
字节码和虚拟机也是语言无关性的基础,因为不止Java语言程序可以编译生成字节码,
其他的很多语言也可以通过相应的编译器编译成JVM规范规定的字节码格式。
目前JDK7和JDK8的JVM已经可以支持一些其他语言运行了,如Croovy、JRuby、Jython、Scala等。
Class文件结构相关定义说明
Class文件的结构是怎样的?
Class文件结构根据《Java虚拟机规范》定义的结构进行存储,类似于C语言的结构体的伪结构。
伪结构中各个数据都有相应的含义,并且各个数据项必须严格按规定的先后顺序排序,他们之间没有信任分隔符和空隙。
所以,存储的几乎都是运行需要的数据(和指令),结构以及说明如下:
类型
名称
数量
说明
u4
magic
1
魔数:确定一个文件是否是Class文件
u2
minor_version
1
Class文件的次版本号
u2
major_version
1
Class文件的主版本号:一个JVM实例只能支持特定范围内版本号的Class文件(可以向下兼容)。
u2
constant_pool_count
1
常量表数量
cp_info
constant_pool
constant_pool_count-1
常量池:以理解为Class文件的资源仓库,后面的其他数据项可以引用常量池内容。
u2
access_flags
1
类的访问标志信息:用于表示这个类或者接口的访问权限及基础属性。
u2
this_class
1
指向当前类的常量索引:用来确定这个类的的全限定名。
u2
super_class
1
指向父类的常量的索引:用来确定这个类的父类的全限定名。
u2
interfaces_count
1
接口的数量
u2
interfaces
interfaces_count
指向接口的常量索引:用来描述这个类实现了哪些接口。
u2
fields_count
1
字段表数量
field_info
fields
fields_count
字段表集合:描述当前类或接口声明的所有字段。
u2
methods_count
1
方法表数量
method_info
methods
methods_count
方法表集合:只描述当前类或接口中声明的方法,不包括从父类或父接口继承的方法。
u2
attributes_count
1
属性表数量
attributes_info
attributes
attributes_count
属性表集合:用于描述某些场景专有的信息,如字节码的指令信息等等。
- JVM_12_Class文件结构
- 文件结构
- 文件结构
- 文件结构
- 文件结构
- 文件结构
- 文件结构
- 文件结构
- bt种子文件文件结构
- MP3文件结构
- mp3文件结构
- mp3文件结构
- swf文件结构解析
- BMP文件结构
- 文件结构(摘录)
- 关于avi文件结构
- Lucene字典文件结构
- [翻译]cal3d文件结构
- hadoop之 hadoop 2.2.X 弃用的配置属性名称及其替换名称对照表
- 前端笔记----jquery入门知识点总结
- [BZOJ3994][SDOI2015]约数个数和(莫比乌斯反演)
- JavaScript中的this基本问题
- Java集合源码分析(二)Linkedlist
- JVM_12_Class文件结构
- python 画三维散图以及在图上加均值点
- 用FastDFS一步步搭建文件管理系统
- 用74HC165读8个按键状态
- ftpclient 550 permission denied
- 初探python
- 推荐一个动画引擎库
- 松柏先生:制胜的一拳靠的不是运气,而是洞察力!
- linux上传项目