1. JVM是什么?
JVM: Java Virtual Machine,Java虚拟机.
什么是虚拟机?
答: 虚拟机指 通过软件模拟的具有完整硬件功能的,运行在一个完全隔离的环境中的完整计算机系统.
Java虚拟机,是虚拟机的一个简化版本,裁减了很多内容,完成Java字节码指令集的执行.
2. Java文件的运行过程
运行的第二步:
对于单行字节码指令的翻译,速度很快,但是大量的字节码指令翻译积少成多,时间消耗也是比较大的.
于是有了JIT即时编译器: 热点代码在运行时,编译为机器码,之后再执行,不需要再翻译,提高了效率.(比如while(true){...}循环代码等)
一个Java进程运行起来: 是一个Java程序(初始化VM参数,创建Java虚拟机,启动一个main线程运行main主函数,启动很多守护线程(GC垃圾回收线程等等))运行起来,作为一个进程.
(1) Java进程运行以后,启动了一个Java虚拟机,包括自动回收垃圾.
(2) 编译期的编译(Java文件编译为class字节码文件),运行期同时存在解释,执行和编译.
- 解释: 翻译字节码为机器码
- 执行: 执行机器码
- 编译: JIT即时编译器的热点代码编译,如循环等.
(3) 有很多第三方Java虚拟机,可以把其他的语言(如kotlin,groovy,scala)编译为字节码,通过Java虚拟机加载到内存执行.
(4) 关于类加载的补充
- 类加载的时机: new对象,调用/设置静态变量值,调用静态方法,执行main方法的类,其他.
- 类加载做的事情: 粗略看,把class字节码数据,加载到Java进程的方法区,堆里边生成了一个Class类对象.
- 类加载时运行期执行的,不仅可以从class文件中加载,还可以从其他来源.