JVM底层原理篇二:Class文件结构

43 阅读1分钟

概念

  • 对于进制类的字节码文件,计算机比人类更容易理解,而我们需要的就是制定文件的规则
  • Class File Format,就是Class文件制定给JVM的规则
  • idea字节码查看工具:sublime

基本核心参数说明:

  • Magic Number ○ 魔术编号,用来标识这个是一个什么样的文件,比如Java的文件开头就是 cafe babe
  • Minor Version ○ 版本小号
  • Major Version ○ 版本主号
  • constant_pool_count ○ 表示的是常量池里面有多少内容
  • constant_pool ○ 长度为 constant_pool_count - 1 的表,因为数组是从0开始,常量池是从1开始,所以要减1 ○ 从1开始的原因:因为它有一个0存在,表示不指向任何常量池的一项,就可以用0表示,保留了一种可能性
  • access_flags ○ 整个class文件的修饰符 ○ 例如整个class,你是用public修饰还是用privote修饰,这一类的标识
  • this_class ○ 当前类叫什么名字
  • super_class ○ 父类叫什么名字
  • interfaces_count ○ 实现了哪些接口
  • interfaces ○ 具体实现了哪些接口,接口的索引
  • fields_count ○ 有哪些属性
  • fields ○ 具体有哪些属性
  • methods_count ○ 有哪些方法
  • methods ○ 具体有哪些方法 ○ 也就是方法的各种结构,标识,名字的索引,附加属性等
  • attributes_count - u2 ○ 附加属性的有哪些
  • attributes ○ 附加属性的具体信息 ○ 最重要的是方法表,也就是方法的字节码指令,JVM会先读一些指令进来,然后根据指令去看自己的指令表,找到执行后再来看方法

fields属性参数

access_flags: 这个属性的修饰符,有没有static?有没有final?
name_index: 名称的索引
descriptor_index: 描述符,到底是什么类型的
attributes: 附加的一些属性,不一定有