概念:JVM也就是虚拟机,本质上是一个运行在计算机上的程序,
作用:运行JAVA字节码文件
JAVA字节码文件运行过程:
- 编译:通过Javac命令,调用JDK编译器,将Java源文件编译成class字节码文件
- 执行:通过Java命令,调用JVM虚拟机,对class字节码文件进行执行
组成:JVM由类加载器 运行时数据区 JVM解释器 JIT即时编译器 垃圾回收机制 本地方法库等部分组成
由类加载器完成字节码文件的加载验证和解析,存储在运行时数据区,并由执行引擎中的解释器,完成字节码到机器码的解释执行,同时进行热点代码的统计分析,调用JIT即时编译器将字节码直接编译成机器码,提高执行效率,JVM运行期间的方法,数据对象统一存放在运行时数据区
JVM执行方式:
JVM以解释和编译混合模式,执行字节码文件。
- JVM的执行方式以解释执行为主,在执行过程中,JVM将每个字节码文件中的每一个指令,通过解释器转换成当前平台可以识别的机器码,然后通过CPU执行
- 为了提高执行效率,JVM还会在运行期间,通过对热点代码的统计分析,识别出高频的方法调用 循环体 公共模块等,当超过阈值(在Client模式下的默认阈值为1500次,在Server模式下的默认阈值为10000次)时,JVM会基于JIT(即时编译器)将热点代码转换成机器码,直接交给CPU执行,提高执行效率
JVM解释器和JIT编译器
JVM解释器:程序执行的时候,解释器首先发挥作用,省去了编译器编译的时间,加快程序的执行效率
JIT编译器:在程序运行过程中,随着时间的推移,JIT开始慢慢的发挥作用,把热点代码编译成本地代码后,以后执行相同的代码,即可直接交给CPU执行,带来更高的效率
功能:
1解释与运行
对字节码文件中的指令实时的解释成机器码
2 内存管理:
自动为对象,方法等分配空间
自动的垃圾回收机制,回收不在使用的对象
3 即时编译:
对热点代码进行优化,提高执行效率
即时编译解释:
Java需要将字节码文件的字节码指令用JVM实时编译成机器码交给计算机运行,实现了跨平台特性,虚拟机如果发现字节码文件中有多次调用的热点代码,会主动将其优化成机器码,并保存在内存中,当下次执行可以直接调用。
为什么要学习JVM
- “面试造火箭,工作拧螺丝”,JVM属于面试官特别喜欢提问的问题
- 未来的工作场景中,或出现以下场景
线上系统突然宕机,系统无法访问
线上系统响应速度太慢,优化系统性能过程中发现CPU占用过高,原因也许是因为JVM的GC次数过于频繁.
新项目上线,需要设置JVM的各种参数
类加载器
字节码文件必须通过类加载器,通过加载 验证 解析等校验步骤,将字节码文件中的类,加载至JVM的运行数据区,才可以执行字节码
垃圾回收器
JVM在运行期间,通过垃圾回收器,地是对运行数据区进行垃圾对象的回收,从而实现了内存的自动管理