Java程序从源文件创建到程序运行要经过两大步骤:
- 编译期,编译器把 .java 源代码文件编译成 .class 字节码文件,放到磁盘上。
- 运行期,Java类加载器将 .class 字节码文件加载到内存,在 JVM 中进行解释并生成可执行代码(机器码),交给计算机执行,直到程序运行结束。(类的加载和类的执行)
一、编译期
编译期分配内存只是说编译期会在生成代码时产生一些指令,根据这些指令可以知道内存分配的大小;在运行代码时才通过这些指令真正把程序所需的内存分配好。
在编译期,将java代码翻译为字节码文件的过程经过了四个步骤,词法分析,语法分析,语义分析,代码生成四个步骤。
注意,字节码文件可以来自本地,也可以在网络上获取,也可以实时生成。就是说你可以跳过写java代码阶段,直接生成字节码交由JVM执行。
二、运行期
类加载
1 加载
类加载是运行期的开始。JVM不是一开始就把所有的类都加载进内存,而是只有第一次遇到某个需要运行的类时才会加载,且只加载一次。
2.1 验证
主要是为了保证加载进来的字节流符合虚拟机规范,不会造成安全错误。包括文件格式、元数据(语法)、字节码、符号引用 四个方面的验证。
2.2 准备
主要是为类变量分配内存,并且赋予 初值。
2.3 解析
将运行时常量池内的符号引用替换为字符串池中直接引用的过程。
3. 初始化
也是对类变量的初始化?????
类执行
4. 使用
程序运行过程
5. 卸载
对于不被引用的对象,适时调用垃圾回收算法进行回收。