Java虚拟机——Class类文件结构_qq_39126079的博客-程序员秘密

技术标签: Java虚拟机  java  

Class文件时一组以8位字节为基础单位的二进制流。
Class文件格式采用一种类似于C语言结构体的伪结构体来存储,这种伪结构体重只有两种数据类型:无符号数和表。
无符号数属于基本数据类型,以u1、u2、u4、u8来分别代表1个字节、2个字节、4个字节、8个字节的无符号数,无符号数可以用来描述数字、索引引用、数量值,或者按照UTF-8编码构成字符串值。
表是由多个无符号数或其他表作为数据项构成的复合数据类型,所有表都习惯性的以“_info”结尾。
Class文件格式如下图所示
在这里插入图片描述

  1. Magic Number
    魔数,用于确定这个文件是否为一个能被虚拟机接受的Class文件。

  2. 版本号
    Minor Version次版本号
    Major Version主版本号

  3. 常量池
    常量池主要存放两大类常量:字面量和符号引用。
    字面量比较接近于Java语言层面的常量概念,如文本字符串、被声明为final的常量值等。
    符号引用包括下面三类常量:
    a、类和接口的全限定名;
    b、字段的名称和描述符
    c、方法的名称的描述符
    常量池中 每一项常量都是一个表,共有11种结构各不相同的表结构数据,它们的第一位都是一个u1类型的标志位(tag,取值为1~12,缺少标志位2的数据类型),代表当前这个常量属于哪种常量类型。常量池项目类型如下图所示。 在这里插入图片描述

  4. 访问标志
    在常量池后面紧接着的2个字节,代表访问标志(access_flags),这个标志用于识别一些类或接口层次的访问信息,包括:这个Class是类还是接口;是否定义为public类型;是否被声明为final等,具体如下图所示。 在这里插入图片描述

  5. 类索引、父类索引与接口索引集合
    类索引和父类索引都是一个u2类型的数据。
    接口索引集合是一组u2类型的数据的集合。
    类索引用于确定这个类的全限定名,父类索引用于确定这个类的父类的全限定名。
    接口索引集合用于描述这个类实现了哪些接口。

  6. 字段表集合
    用于描述接口或类中声明的变量,字段表结构如下图 在这里插入图片描述

  7. 方法表集合
    用于描述方法,结构与字段表类似。方法中具体的代码则存放在属性表集合的“Code”的属性中。 在这里插入图片描述

  8. 属性表集合
    Class文件、字段表、方法表中都可以携带自己的属性表集合。属性表没有严格的顺序要求。有以下属性 在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_39126079/article/details/104261985

智能推荐

python并列循环,并行处理python中的循环_出馬仙老于頭的博客-程序员秘密

Is there any possibility to parallelize the following code in python? I was wondering how to convert this code with map and lambda functions..values = (1,2,3,4,5 )def op(x,y):return x+y[(i, j, op(i, j...

基于漫水填充法的二值图像封闭孔洞填充_漫水空洞填补_1290939507的博客-程序员秘密

将大背景全部用前景色(白色)填充(cvFloodFill函数,一(0,0)为种子点即可),即得到孔洞图(此时孔洞用为黑色),然后将此图二值反转,即得到用白色表示的孔洞图,然后将此空洞图与原二值图相加(使用cvAdd函数即可)即可将孔洞填充掉。

Div + CSS (几个css元素的简单解释)_普通网友的博客-程序员秘密

几个css元素的简单解释 div ul dl dt oldiv,这个很常见,块级元素,div尽量少用,和table一样,嵌套越少越好ol 有序列表。<ol><li>……</li><li>……</li><li>……</li></ol>表现为:1……2…...

函数式编程之 Clojure_weixin_34293246的博客-程序员秘密

为什么80%的码农都做不了架构师?>>> ...

tplink 虚拟服务器没有https,tplink虚拟服务器设置_少女心杀手刘小姐的博客-程序员秘密

tplink虚拟服务器设置 内容精选换一换组合API版本1.8.9及以上ECS UI版本2.2.29及以上Region内的所有裸金属服务器POD必须全部升级为IaaS OpenStack V100R006C20U20版本或该版本以上仅支持VPC网卡增删裸金属服务器的VPC网卡数受Flavor中的baremetal:net_num个数限制裸金属服务器运行中或者关机状态才能进行增删网弹性云服务器(El...

http://www.360doc.com/content/10/0307/00/45806_17835784.shtml_w87875251l的博客-程序员秘密

<br />http://www.360doc.com/content/10/0307/00/45806_17835784.shtml

随便推点

Hadoop初学者_hadoop新生_是小不点吖的博客-程序员秘密

HadoopHadoop的介绍Hadoop有什么优点Hadoop发展史(了解)Hadoop三大发行版本Hadoop的组成Hadoop组成一:HDFSHadoop组成二:MapReduceHadoop组成三:YarnHadoop的介绍(1) Hadoop是什么?1.狭义:Hadoop是一个有Apache基金会所开发的分布式系统(软件)基础架构2.广义:Hadoop通常是指一个更广泛的概念——Hadoop生态圈。(2) Hadoop有什么用?主要解决,海量数据的存储和海量数据的分析计算

小飞鱼通达二开 企业微信与通达OA的另一种集成方式(图文)_通达oa对接微信企业号_小飞鱼通达二开的博客-程序员秘密

我们平常用的通达OA跟企业微信集成的方式都是,在手机端微信上可以打开并操作OA里的功能,如查看公告通知、办理工作流、查阅邮件等,随时随地都可以移动办公很是方便。那大家有没有想过另外一种使用方式呢,就是从企业微信的电脑端打开OA,或者OA应用呢?what?!因为企业微信也有电脑端软件的,钉钉也有电脑端,在办公室工作的人员需要使用电脑端来使用,在客户端里面还链接了一些其他的非OA应用。因为已经使用这个客户端很习惯了,完全可以替代oa精灵使用,只是一些OA系统的消息提醒不能直接弹出来,只是链接oa页面还需

Java程序员从笨鸟到菜鸟之(二十二)华山论session和cookie机制_cookie笨鸟_newjueqi的博客-程序员秘密

http://blog.csdn.net/csh624366188/article/details/7425770             会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。

关于spin_lock使用过程中的一次问题定位_在spin_lock中打印_00行者无疆的博客-程序员秘密

1、        问题描述软硬件约束条件:软件平台:linux 3.4.35的kernel版本硬件平台:海思3518ev200芯片([email protected])问题现象:报警主机向slic芯片每100ms发送一个cid报文(DTMF双频音),slic芯片检测到双频音后触发中断,中断函数做相关的处理,主要是读走双频音数据。偶现的问题是cid报文会丢失,导致异常。2、        问题定位首先ci...

zabbix 4.0自定义模板主动模式[tcp,nginx,centos,mysql,activemq]_chepan7851的博客-程序员秘密

zabbix客户端配置文件 cat /etc/zabbix/zabbix_agentd.confPidFile=/var/run/zabbix/zabbix_agentd.pidLogFile=/var/log/zabbix/zabbix_agentd.logLogFileSiz...

角谷猜想_涛涛涛不淘的博客-程序员秘密

角谷猜想。所谓角谷猜想,是指对于任意一个正整数,如果是奇数,则乘3加1,如果是偶数,则除以2,得到的结果再按照上述规则重复处理,最终总能够得到1.如,假定初始整数为5,计算过程分别为16、8、4、2、1。要求输入一个正整数,输出从整个整数到1的步骤,每一步为一行,每一步中描述计算过程。import java.util.Scanner;public class text{ public static void main(String args[]){ Scanner scann

推荐文章

热门文章

相关标签