JVM概述
1.虚拟机
虚拟机就是一台虚拟的计算机。通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的计算机系统。它是一款软件,用来执行一系列虚拟计算机指令。大体上,虚拟机可以分为系统虚拟机(例如:VMware)和程序虚拟机(例如:java虚拟机)。无论是系统虚拟机还是程序虚拟机,在上面运行的软件都被限制于虚拟机提供的资源。
-
VMware
完全对物理计算机的仿真,提供了一个可运行完整操作系统的软件平台。
-
java虚拟机(JVM)
专门为执行某个单个计算机程序而设计。Java虚拟机是一种执行java字节码文件的虚拟计算机,它拥有独立的运行机制。
java技术的核心就是java虚拟机,因为所有的java程序都运行在java虚拟机内部。
2.JVM作用
java虚拟机就是二进制字节码的运行环境,负责装载字节码到其内部,解释/编译为对应平台上的机器码指令执行,每一条java指令,java虚拟机中都有详细定义,如怎么去操作数,怎么处理操作数,处理结果放在哪。
主要功能:
- 通过ClassLoader寻找和装载class文件。
- 解释字节码称为指令并执行,提供class文件的运行环境。
- 自动进行运行期间的内存分配和垃圾回收。
- 提供与硬件交互的平台。
现在的JVM不仅可以执行java字节码文件,还可以执行其他语言编译后的字节码文件,是一个跨语言平台。
3.JVM的位置
JVM是运行在操作系统之上的,它与硬件没有直接的交互。
4.JVM整体组成
- 类加载器(ClassLoader)
- 运行时数据区(Runtime Data Area)
- 执行引擎(Execution Engine)
- 本地库接口(Native Interface)
过程:程序在执行之前先要把java代码转换成字节码(class文件),jvm首先需要把字节码通过一定的方式类加载器把文件加载到内存中运行时数据区,而字节码文件是jvm的一套指令集规范,并不能直接交给底层操作系统去执行,因此需要特定的命令解析器执行引擎将字节码翻译成底层系统指令再交有CPU去执行,而这个过程中需要调用其他语言的接口本地库接口来实现整个程序的功能,这就是这4个主要组成部分的职责与功能。
5.java代码的执行流程
java编译器编译过程中,任何一个节点执行失败就会造成编译失败。虽然各个平台的java虚拟机内部实现细节不尽相同,但是它们执行的字节码内容却是一样的。
JVM主要任务就是负责将字节码装载到其内部,解释/编译为对应平台上的机器指令执行。JVM使用类加载器装载class文件。
类加载完成后,会进行字节码校验,字节码校验通过之后JVM解释器会把字节码翻译成机器码交由操作系统执行。
但不是所有的代码都是解释执行,JVM对此做了优化,比如HoySpot虚拟机,它本身提供了JIT。
6.JVM架构模型
java编译器输入的指令流基本上是一种基于栈的指令集架构。
两种架构特点
1.基于栈式架构的特点:
- 设计和实现更简单,适用于资源受限的系统。
- 使用零地址指令方式分配,其执行过程依赖与操作栈,指令集更小,编译器容易实现。
- 不需要硬件支持,可移植性好,更好跨平台。
- 指令集数量多,指令集小。
2.基于寄存器式架构特点:
- 指令完全依赖于硬件,可移植性差。
- 性能优秀,执行更高效。
- 完成一项操作使用的指令更少。
由于跨平台的设计,java指令集都是根据栈来设计的,不同CPU架构不同,所以不能设计为基于寄存器的。
面试题:时至今日,HotSpot虚拟机的宿主环境已经不局限于嵌入式平台了,那么为什么不将架构更换为性能更好的寄存器指令集架构呢?
答:两种指令集架构各有优劣,并存发展。首先,在设计和实现上,基于栈式的架构更简单。其次无论平台的资源是否受限制,基于栈式的架构都是可以使用的。(针对栈式的优点,可以继续balabala…)
转载:https://blog.csdn.net/qdzjo/article/details/115441040