jvm前奏篇
javac编译原理 源文件----->类文件
词法分析------>语法分析------>语义分析----字节码生成器------.class 文件
javap 反编译
之所以能到处运行就是 因为 class文件 就是 通过 javaformat 规范
java 类加载机制:
类文件要运行在JVM中,装载、链接、初始化
装载:
① 就是查找和导入class 文件 将类文件转换为 二进制流 ClassLoader 类加载,不同的类加载器,加载不同区域的class文件
② 讲二进制流的静态结构,转换到 运行时数据区的某一块区域【方法区】
同名的类 由上层去加载,这种模式叫做 双亲委派模型 (由父亲去加载,父亲加载到了 自己就不去加载了) 如果想打破这种规律,就是 重写 classLoader里面的 findClass方法 此处需要做实验 破坏双亲委派模型
双亲委派模型很好地解决了各个类加载器的基础类统一问题(越是基础的类越由上层加载器加载),基础类被其他的对象锁调用,但是如果基础类需要加载调回其他用户的代码的时候模型便会被破坏。
双亲委派模型工作过程是:如果一个类加载器收到类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器完成。每个类加载器都是如此,只有当父加载器在自己的搜索范围内找不到指定的类时(即ClassNotFoundException
),子加载器才会尝试自己去加载。
链接:
一、验证
验证数据的有效性
二、准备
为类的静态变量分配内存、初始化值 为默认值
三、解析
把类中的符号引号转化为直接引用
初始化:
类的静态变量,赋值真正的值