JVM-类字节码
-
Java字节码文件
-
多语言编译为字节码在JVM上运行
- Java代码简介翻译成字节码,储存字节码的文件再交由运行与不同平台上的JVM虚拟机去读取执行,从而实现一次编写,到处运行的目的
- JVM虚拟机也并不是只支持Java一种语言,基于字节码也衍生出来其他许多基于JVM的编程语言,如 Koltin、Groovy、Scala。。。
-
Class文件的结构属性
-
魔数与Class文件的版本:每个class文件的头四个子接为魔数,值为:0xCAFEBABE他的作用为确定这个文件是字节码文件。紧随着魔数的四个子接储存的是Class文件的版本号:5、6字节存储的是此版本号,7、8字节为主版本号,主版本号是从java1.1 对应的45开始,之后的每个大版本都会将主版本号加一.
-
常量池:常量池可以理解为class文件的资源仓库,是class文件结构中关联最多的数据类型,也是占用class文件最大的数据项目之一。常量池中主要存放的两大常量:字面量和符号引用
-
字面量:类似于Java中的常量的概念,如文本字符串、final常量等
-
符号引用
- 类和接口的全限定名
- 字段的名称和描述符号
- 方法的名称和描述符
-
不同与c/c++,JVM是在加载Class文件的时候才进行的动态链接,也就是说这些字段和方法符号引用只有在运行期转换后才能真正获得内存入口地址
-
-
访问标志:表示改class的属性和访问类型,比如该class是类还是接口;是否定义为public;是否为abstract;是否为final
-
类索引、父类索引与接口索引集合:靠这三项数据确定这个类的继承关系
-
字段表集合:用于描述接口或类中声名的变量,比如变量的作用域、是否为静态变量、可变性、数据的类型。。。。。
-
方法表集合:**用于描述接口或类中声名的方法,**与字段表集合类似
-
属性表集合:用于描述某些场景专有的信息,比如字段中的特殊属性,方法中的特殊属性(eg:code属性:表示代码的逻辑部分。。。。),且class文件、方法表,字段表都可以携带自己的属性表集合。具体看《深入理解Java虚拟机》P230~P233
-
-