深入了解Java虚拟机(二)

深入了解Java虚拟机(二)

  2.jvm的类加载

  • class文件的格式class文件是以8位字节为基础单位的二进制流,各项目数据紧密的严格排列在一起,采用的是伪结构来存储,采用的是无符号数和表两种数据类型

   无符号数是基本的数据类型,以u1、u2、u4、u8来表示1、2、4、8个字节的无符号数,用来描述数字、索引引用、数量值或UTF-8构成的字符串

          表是由多个无符号数或其他表作为数据项构成,习惯性的已“_info”结尾,描述有层次关系的符合结构数据

    

以书中的TestClass例子为准,魔数:CAFEBABE,主版本号是从45开始的,jdk是能向下兼容的,常量池计数是从1开始的,主要包含字面量(常量)和符号引用(类和接口的全限定名、字段的描述和名称、方法的描述和名称)。

以书中的例子的第一个常量池数据为参考

01表明该常量是UTF8_info即是一位,后面的两位表示长度有29个,接着就是对应的具体值,是ASCII码,可以反过头去对应的。其余的同理

可以通过javap命令来反编译输出class文件中常量池的详细信息。

后面需要理解的是,各种修饰符会在这些字节码中体现出来,另外方法体是放在code属性表中的,这里没有去做理解

 

  • 类文件的加载过程

         

       Java的规范是分为Java语言规范和Java虚拟机规范两部分的,Java虚拟机上是可以运行其它合乎规范的语言的

 

猜你喜欢

转载自www.cnblogs.com/lvcongblog/p/10274656.html