Class文件结构


前言

WX20180411-173230@2x

1、魔数

每个class文件开头的4个字节成为魔数,它的唯一作用就是识别它是一个什么文件,在git或者是jpeg等文件开头都有魔数的存在 ,因为仅仅通过扩展名来判断是不能保证正确性的, class文件的魔数值为 0XCAFEBABE (咖啡宝贝,很好记吧哈,16进制)

WX20180411-173534@2x

2、版本

接着就是版本号,前面2个字节是次版本,后面2个是主版本(0000 0034)JDK1.6 (其实也是相当于是根据选择的jar包来看的,我这里使用的jdk是1.8,但是项目中用到的jar为最高为1.6,所以这里显示为1.6了),

WX20180411-174304@2x

3、常量池

常量池可以理解为时class文件的资源仓库,它是class文件中与其他项目关联最多的数据类型,也是占用class文件空间最大的数据项目之一,同时它还是在Class文件中第一个出现的表类型数据项目

由于常量池中的常量数量是不确定的,所以在常量池的入口需要有两个字节用来代表常量池容量计数值(常量池索引从1开始)。
一共有14种常量类型,有着各自对应的结构,但开始的一个字节同样都是表示标志位,用来区分不同的类型。
下面为14种常量的具体类型和对应的标志位:

WX20180411-175349@2x


Author: jony
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source jony !
 Previous
虚拟机类加载机制 虚拟机类加载机制
前言 1.classLoader的介绍及加载过程   与普通程序不同的是,Java程序(class文件)并不是本地的可执行程序。当运行Java程序时,首先运行JVM(Java虚拟机),然后再把Java class加载到JVM里头运行,负
2018-04-11
Next 
JVM参数 JVM参数
前言Java堆大小为20M 不可扩展(Xms表示初始Java堆大小 Xmx为Java堆最大 这里设置相等,就表明不可以扩展) Xmn 表示分给新生代 (下面表示分给新生到10M,那么剩余的就分配给了老年代) 12345-verbos
2018-04-11
  TOC