1、javac编译器把java源代码翻译成字节码文件,称为前端编译器
2、JIT编译器将字节码转换成本地机器代码后运行,另一种是java解释器直接解释执行字节码。
3、字节码被JVM加载到虚拟机内存结构中(也叫运行时数据区),包括堆、方法区、常量区。PC寄存器、虚拟机栈、本地方法栈。其中字节码被分配到方法区中。
4、类加载到虚拟机内存中,生命周期经过加载、验证、准备、解析、初始化、使用、卸载七个阶段。
- 加载
在遇到1、实例化类2、读取或设置类静态字段3、调用类的静态方法后会进行加载操作
加载过程
① 通过一个类的全限定名来获取定义此类的二进制字节流。
② 将这个字节流所代表的的静态存储结构转化为方法区的运行时数据结构;
③ 在内存中(对于HotSpot虚拟机而言就是方法区)生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据访问入口;
- 初始化
执行类构造器(注意和实例构造器的差异,实例构造器是new Object的时候调用),类构造器是static块,static变量进行初始化。
参考文章
https://www.jianshu.com/p/74f0501493b3
https://www.cnblogs.com/chanshuyi/p/jvm_serial_06_jvm_memory_model.html