一文搞懂:Java虚拟机(JVM)及其架构

什么是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缓慢背后的两个主要原因是

  1. **动态链接:**与C不同,每次程序在Java中运行时,链接都是在运行时完成的。
  2. **运行时解释器:**字节代码转换为本机机器代码是在Java运行时完成的,这进一步降低了速度

但是,最新版本的Java在很大程度上解决了性能瓶颈问题。

摘要

  • JVM或Java虚拟机是驱动Java代码的引擎。它将Java字节码转换为机器语言。
  • 在JVM中,Java代码被编译为字节码。该字节码在不同的机器上解释
  • JIT或Just-in-time编译器是Java虚拟机(JVM)的一部分。它用于加快执行时间
  • 与其他编译器机器相比,Java的执行速度可能较慢。

关注公众号:「Java知己」,每天更新Java知识哦,期待你的到来!

  • 发送「1024」,免费领取 30 本经典编程书籍。
  • 发送「Group」,与 10 万程序员一起进步。
  • 发送「JavaEE实战」,领取《JavaEE实战》系列视频教程。
  • 发送「玩转算法」,领取《玩转算法》系列视频教程。

Java知己

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值