在运行Java程序前应该是先启动Java虚拟机,然后再寻找main方法启动Java程序。
Complie Time — 前端编译
- 编写源代码
- 编译器(compiler)检查是否存在编译期错误,如缺少;等问题。若无编译问题,编译器会将源文件翻译成字节码(bytecode).class后缀的文件。
- 生成class文件
Run Time
- JVM中的( Class Loader )类加载器将字节码文件从硬盘中加载到JVM内存中。
- 字节码校验器(bytecode verifier)的内置程序检测是否存在运行期错误(例如栈溢出)。没有错误,字节码校验器将字节码传递给解释器(interpreter).
- 解释器(interpreter)将其翻译成机器可以理解的机器码(machine code)—后端编译
- 将可执行的机器码交给操作系统,操作系统会以main方法作为入口开始执行程序。
注:JIT的作用是在编译过程中对代码优化,如去掉多余的代码。
代码的编译过程是在程序执行前执行的操作,具体动作就是执行javac命令,如打包成jar包或war包的过程
**具体的代码编译过程参考 JVM篇,编译原理编译原理 **