类加载机制和JVM内存模型
一.什么是
class文件加载到jvm中运行
二.过程
1.装载:找到在哪里
(1)通过类的全限定路径名找到类的二进制流 类装载器:ClassLoader
保证类的唯一性,先顶层加载,最后轮到我才加载
(2)将字节流所代表的的静态存储结构转化为方法区的运行时数据结构
(3)代表当前类的java.lang.Class对象,放到jvm堆
2.链接
验证:文件格式,元数据,字节码,符号引用的验证
准备:为类的静态变量分配内存,初始化为默认值,方法区分配
解析:将类中的符号引用替换成直接引用
3.初始化
为类的静态变量,静态代码执行真正的初始化操作,比如a=9,a才能真正赋值为9
三.JVM
堆:存储对象,线程共享,生命周期和虚拟机一样 OOM
方法区:存储类信息,常量,静态变量,即时编辑器编译之后的代码,被所有线程共享 OOM
--运行期常量池:用于存放编译期生成的各种字面量和符号引用
虚拟机栈:线程是为了执行方法,每个线程执行的方法就是一个一个栈帧,线程就是一个jvm栈,栈帧就是方法的执行
程序计数器:每个线程里记录当前方法执行的位置
native栈:调用C方法
四.栈中的方法调用过程
1.a调用b,b调用c
2.栈帧的执行过程
javap反解字节码指令
五.jvm模型