什么是JVM?
JVM是一个引擎,它提供运行时环境来驱动Java代码或应用程序。它将Java字节码转换为机器语言。JVM是JRE(Java Run Environment)的一部分。它代表Java虚拟机
- 在其他编程语言中,编译器为特定系统生成机器代码。但是,Java编译器为称为Java虚拟机的虚拟机生成代码。
- 首先,Java代码被编译为字节码。该字节码在不同的机器上解释
- 在主机系统和Java源之间,Bytecode是一种中间语言。
- JVM负责分配内存空间。
JVM架构
让我们了解JVM的体系结构。它包含类加载器,内存区域,执行引擎等。
1)ClassLoader
类加载器是用于加载类文件的子系统。它执行三个主要功能即。加载,链接和初始化。
2)方法区域
JVM方法区域存储类结构,如元数据,常量运行时池和方法代码。
3)堆
所有对象,它们的相关实例变量和数组都存储在堆中。此内存很常见,可以跨多个线程共享。
4)JVM语言堆栈
Java语言Stacks存储局部变量,它是部分结果。每个线程都有自己的JVM堆栈,在创建线程时同时创建。每当调用方法时都会创建一个新帧,并在方法调用过程完成时删除它。
5)PC寄存器
PC寄存器存储当前正在执行的Java虚拟机指令的地址。在Java中,每个线程都有其独立的PC寄存器。
6)本机方法堆栈
本机方法堆栈保存本机代码的指令取决于本机库。它是用另一种语言而不是Java编写的。
7)执行引擎
它是一种用于测试硬件,软件或完整系统的软件。测试执行引擎从不携带有关测试产品的任何信息。
8)Native Method接口
Native Method Interface是一个编程框架。它允许在JVM中运行的Java代码由库和本机应用程序调用。
9)原生方法库
Native Libraries是执行引擎所需的本机库(C,C ++)的集合。
软件代码编译和执行过程
要编写和执行软件程序,您需要以下内容
1)编辑器 - 要输入您的程序,可以使用记事本
2)编译器 - 将高级语言程序转换为本机机器代码
3)链接器 - 将主程序中的不同程序文件引用组合在一起。
4)Loader - 将文件从二级存储设备(如硬盘,闪存驱动器,CD )加载到RAM中以便执行。执行代码时会自动完成加载。
5)执行 - 实际执行由您的OS和处理器处理的代码。
C代码编译和执行过程
要了解Java中的Java编译过程。我们先来快速了解一下C中的编译和链接过程。
假设在main中,你调用了两个函数f1和f2。主函数存储在文件a1.c中。
函数f1存储在文件a2.c中
函数f2存储在文件a3.c中
所有这些文件,即a1.c,a2.c和a3.c,都被送到编译器。其输出是相应的目标文件,即机器代码。
下一步是在链接器的帮助下将所有这些目标文件集成到单个.exe文件中。链接器将所有这些文件组合在一起并生成.exe文件。
在程序运行期间,加载程序会将a.exe加载到RAM中以执行。
Java代码Java VM中的编译和执行
我们来看看JAVA的过程。在你的主要部分,你有两个方法f1和f2。
- main方法存储在文件a1.java中
- f1作为a2.java存储在文件中
- f2作为a3.java存储在文件中
编译器将编译这三个文件并生成3个相应的.class文件,该文件由BYTE代码组成。与C不同,不进行链接。
Java VM或Java虚拟机驻留在RAM上。在执行期间,使用类加载器将类文件放在RAM上。针对任何安全漏洞验证BYTE代码。
接下来,执行引擎将Bytecode转换为Native机器代码。这是及时编译。这是Java相对较慢的主要原因之一。
注意: JIT或Just-in-time编译器是Java虚拟机(JVM)的一部分。它解释了具有类似功能的字节代码的一部分。
为什么Java既有解释语言又有编译语言?
编程语言分类为
- 高级语言Ex。C ++,Java
- 中级语言Ex。C
- 低级语言组装
- 最后是机器语言的最低级别。
甲编译器是一个程序,它的程序从到另一种语言中的一个电平转换。将C ++程序转换为机器代码的示例。
java编译器将高级java代码转换为字节码(也是一种机器代码)。
一种解释是一个程序,它在一个级别到另一个编程语言编写的程序转换**同一水平。**将Java程序转换为C ++的示例
在Java中,即时编码生成器将字节码转换为处于相同编程级别的本机机器代码。
因此,Java既可以编译也可以解释语言。
为什么Java慢?
Java缓慢背后的两个主要原因是
- **动态链接:**与C不同,每次程序在Java中运行时,链接都是在运行时完成的。
- **运行时解释器:**字节代码转换为本机机器代码是在Java运行时完成的,这进一步降低了速度
但是,最新版本的Java在很大程度上解决了性能瓶颈问题。
摘要:
- JVM或Java虚拟机是驱动Java代码的引擎。它将Java字节码转换为机器语言。
- 在JVM中,Java代码被编译为字节码。该字节码在不同的机器上解释
- JIT或Just-in-time编译器是Java虚拟机(JVM)的一部分。它用于加快执行时间
- 与其他编译器机器相比,Java的执行速度可能较慢。