JVM初探之类文件结构

java 的 .class 文件字节码如图:

Class 文件是一组以8字节为基础单位的二进制流,各个数据项目有着严格的结构。下面我们介绍下class文件的结构。

魔数
  class文件的头4个字节是魔数:  ,他的作用便是验证这个文件是否是一个java虚拟机可以使用的文件,

版本号

  接下来的是两个字节的小版本号,和两个字节的大版本号:  

常量池结构

  它分为两个部分:

第一部分是:常量池的容量:  即二进制 54 ,代表了 53 项常量,注意这里的容量计数是从 1 开始的即索引范围是 1 ~ 53。

第二部分是:常量池的内容:常量池有的项目类型

              CONSTANT_Utf8_info     1    UTF-8 编码的字符串

              CONSTANT_Integer_infor   3    整型字面量

                    ...      

              CONSTANT_Class_infor     7      类或接口的符号引用

                    ...

这些项目类型还有自己的结构,这里先不写出来了。这一部分的字节码如图:  

就是常量池容量后面的 53 个常量,一大堆的字节。后面其实还有的。。。。 就到这里吧。

访问标志

    常量池之后就是两个字节的访问标志,用于识别类或者接口层次的访问信息。

      一些访问标志:

            ACC_PUBLIC  0x0001    是否为 public 类型

            ...

接下来是类索引、父类索引与接口索引集合

字段表集合

方法表集合

属性表集合

 

参考:深入理解java虚拟机  -- 周志明 著

posted @ 2017-04-10 19:42  Angel-h  阅读(173)  评论(0编辑  收藏  举报