网站建设制作设计开发,关键词排名优化系统,长沙网络推广营销,瑞昌市建设局网站Java虚拟机
Java虚拟机的组成
Java虚拟机的组成由类加载器ClassLoader、运行时数据区域#xff08;JVM管理的内存#xff09;和执行引擎#xff08;即时遍历器、解释器垃圾回收器#xff09;
类加载器加载class字节码文件中的内容到内存运行时数据区域负责管理jvm使用到…Java虚拟机
Java虚拟机的组成
Java虚拟机的组成由类加载器ClassLoader、运行时数据区域JVM管理的内存和执行引擎即时遍历器、解释器垃圾回收器
类加载器加载class字节码文件中的内容到内存运行时数据区域负责管理jvm使用到的内存比如创建对象和销毁对象执行引擎将字节码文件中的指令解释称机器码同时使用即时编译器优化性能
字节码文件的组成
字节码文件的组成由基础信息、常量池、字段、方法和属性
基础信息
魔数、字节码文件对应的Java版本号、访问标识public final等等、父类和接口
Magic魔数
文件是无法通过文件扩展名来确定文件类型的文件扩展名可以随意修改不影响文件的内容软件使用文件的头几个字节文件头去校验文件的类型如果软件不支持该种类型就会出错Java字节码文件中国将文件头成为magic魔数
文件类型字节数文件头jpg3FFD8FFpng489504E47bmp2424Dxml53C3F786D6Cavi441564920java字节码文件4CAFEBABE
主副版本号
主副版本号指的是编译字节码文件的JDK版本号主版本号用来标识大版本号JDK1.0-1.1使用了45.0-45.3JDK1.2是46之后每升级一个大版本就加1副版本号是当主版本号相同时作为区分不通过版本的标识一般只需要关心主版本号版本号的作用主要是判断当前字节码的版本和运行时的JDK是否兼容
名称作用Magic魔数固定位0xCAFEBABE副版本号主版本号编译字节码文件的JDK版本访问标识标识是类还是接口、注解、枚举、模块标识public final abstract类、父类、接口索引通过这些索引可以找到类、父类、接口的信息
常量池
保存了字符串常量、类或接口名、字段名主要在字节码指令中使用
字节码文件中常量池的作用避免相同的内容重复定义节省空间常量池中的数据都有一个编号编号从1开始。在字段或者字节码指令中通过编号可以快速的找到对应的数据字节码指令中通过编号引用到常量池的过程称之为符号引用
方法
当前类或接口声明的方法信息字节码指令
操作数栈是临时存放数据的地方局部变量表是存放方法中的局部变量的位置
类的生命周期
加载阶段 加载阶段第一步是类加载器根据类的全限定名通过不同的渠道以二进制流的方式获取字节码信息 类加载器在加载完类之后Java虚拟机会将字节码中的信息保存到方法区中 生成一个InstanceKlass对象保存类的所有信息里边还包含实现特定功能比如多态的信息 同时Java虚拟机还会在堆中生成一份与方法区中数据类似的java.lang.Class对象 作用是在Java代码中去获取类的信息以及存储静态字段的数据JDK8及之后
推荐使用JDK自带的hsdb工具查看Java虚拟机内存信息。工具位于JDK安装目录下lib文件夹中的sa-jdi.jar中启动命令java -cp sa-jdi.jar sun.jvm.hotspot.HSDB
连接阶段
连接阶段分为验证、准备和解析
验证的主要目的是验证内容是否满足《Java虚拟机规范》
准备的主要目的是给静态变量赋初值
解析的主要目的是将常量池中的符号引用替换成指向内存的直接引用
初始化阶段
初始化阶段会执行静态代码块中的代码并为静态变量赋值初始化阶段会执行字节码文件中clinit部分的字节码指令