1.虚拟机的基本概念:
虚拟机是运行Java代码的假象计算机
2.虚拟机的组成:
堆、虚拟机栈、方法区、本地方法栈、寄存器
3.java运行编译过程:
①java源文件(.java) ——> 编译器 ——> 字节码(.class)
②字节码文件(.class) ——> JVM ——>生成机器码(机器码就是机器指令,就是某种CPU的指令集)
4 JVM运行原理:
字节码文件被类加载器装载,进入内存;
被执行引擎解释执行,最终产生机器码。
4.1类的加载的含义
将.class文件中的二进制数据读入到内存中,将其放在方法区,然
后再堆中创建一个java.lang.Class对象,用来封装在类的方法区中
的数据结构,并向程序员提供该数据结构的接口;类的加载的最终
产品是在堆中创建一个class对象。
4.2类的加载的步骤
1.装载(load)
2.链接(link)
2.1 验证
2.2 准备
2.3 解析
3.初始化(initialize)
1.装载(load)
①通过全类名获得二进制字节流
②将字节流代表的静态存储结构———>变为方法区的运行时数
据结构
③在堆中产生该类的Class对象,作为访问方法区数据结构的接
口
2.链接(link)
2.1 验证:确保字节流包含的信息不会危害虚拟机且符合虚拟机
的要求
2.2 准备 :为类变量在方法区分配内存(注意:实例变量在对象
实例化时随之在堆中分配内存);并且赋默认初值(如0、0L、null、false等,不是在Java代码中显示赋值)
2.3 解析:解析阶段是虚拟机将常量池内的符号引用替换为直接
引用的过程
3.初始化(initialize)
为类的静态变量赋予正确初始值
类的初始化过程:
若类未被加载和链接,则先加载和链接
若类种有直接父类未被初始化,先将父类初始化(一个类只被初始化一次)
如类中有初始化语句(static变量和static类),则先执行这些初始化语句