每天学一点:java虚拟机6

Class文件:
每个文件前4个字节都被称为它的魔数(magic number):0xCAFEBABE。如果一个文件不是以这个开头,那就肯定不是java class文件。
注:CAFEBABE是咖啡品牌Peet's Coffee深受欢迎的一个产品。

版本号确定了特定的class文件格式,只有给定了主版本号和一系列次版本号后,虚拟机才弄呢狗狗读取class文件。
例:45.0:主版本号45,次版本号0
如果javac命令制定 -target 1.2 标志。1.2的编译器将产生版本号为46.0的class文件。

java虚拟机第二版修改了对class文件主、次版本号的解释,class文件的主版本号与java平台主版本发布的版本号保持一致,次版本号与特定主平台发布版的各发布办有关。

class文件中,魔数和版本号后面是常量池,包含了类和接口相关的常量,存储了文字字符串、final变量值、;类名和方法名的常量。

每个常量池入口都从一个长度为一个字节的标志开始,这个标志列出了该位置的常量类型。

动态链接的java程序中,常量池还可以容纳一下几种符号引用:
类和接口的权限定名
字段的名称和描述符;
方法的名称和描述符;
字段是类或接口的实例变量或者类变量,字段的描述符是一个只是字段的类型的字符串。
方法的描述符也是一个字符串,指示方法的返回值和参数的数量、顺序、类型。

由于class文件并不包含其内部组建最终内存布局的信息,因此,类、字段和方法并不能被class文件中的字节码直接引用;
java虚拟机从常量池获得符号引用,然后再运行时解析引用项的实际地址。

猜你喜欢

转载自baoxiaofei.iteye.com/blog/2272468