前言
我们都知道java是编译为class文件,然后在jvm中运行的,我认为有4个步骤:编译->加载->解释->执行
一、编译
编译器对java源码做「语法分析」「语义分析」「注解处理」等等处理,然后生成字节码(class)文件。eg: Lombok。
二、加载
将class加载到jvm。(装载->连接->初始化)
1.装载
1.【装载时机】jvm为了节省内存,不会一次性装载全部的类,而是需要时,才装载。
2.【装载发生】class通过「类加载器」装载到jvm,为防止重复,采用双亲委派机制。
3.【装载规则】jdk本地方法由根加载器(Bootstrap loader)装载;
jdk内部扩展由扩展类加载器(ExtclassLoader)装载;
程序中的类由系统类加载器(AppClassLoader)装载;
此外还有自定义类加载器。
装载的具体内容:
1.找到class的二进制文件;
2.在「堆」中创建对象;类相关信息存入「方法区」;
2.连接(验证->准备->解析)
对class进行验证,为「类变量」分配内存空间;同时赋默认值。
1.验证
class是否符