事无巨细说Java之---JVM(Java 虚拟机)架构

本文详细介绍了Java虚拟机(JVM)的工作原理,包括其作为平台依赖的规范角色,以及JVM的主要功能,如加载、验证、执行代码和提供运行时环境。文章还探讨了JVM的内部架构,包括类加载器(Bootstrap、Extension和Application ClassLoader)、类(方法)区、堆、栈、程序计数器寄存器、原生方法栈和执行引擎,以及JIT编译器和Java原生接口(JNI)的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JVM(Java虚拟机)是一种抽象机器。 它是一种提供运行时环境的规范,可以在其中执行 java 字节码。

JVM 可用于许多硬件和软件平台(即 JVM 取决于平台)。

什么是JVM
这是:

指定 Java 虚拟机工作的规范。 但实现提供者独立选择算法。 它的实现由 Oracle 和其他公司提供。
一个实现 它的实现被称为 JRE(Java 运行时环境)。
运行时实例 每当您在命令提示符下编写 java 命令以运行 java 类时,就会创建一个 JVM 实例。

它能做什么?

JVM 执行以下操作:

加载代码
验证代码
执行代码
提供运行环境


JVM 为以下内容提供定义:

内存区
类文件格式
寄存器组
垃圾收集堆
致命错误报告等

JVM架构
让我们了解一下JVM的内部架构。 它包含类加载器、内存区域、执行引擎等。

1) 类加载器
Classloader 是 JVM 的一个子系统,用于加载类文件。每当我们运行 java 程序时,它首先由类加载器加载。 Java中有三个内置的类加载器。

Bootstrap ClassLoader:这是第一个类加载器,它是 Extension 类加载器的超类。它加载包含Java标准版所有类文件的rt.jar文件,如java.lang包类、java.net包类、java.util包类、java.io包类、java.sql包类等。
Extension ClassLoader:这是Bootstrap的子类加载器和System类加载器的父类加载器。它加载位于 $JAVA_HOME/jre/lib/ext 目录中的 jar 文件。
System/Application ClassLoader:这是扩展类加载器的子类加载器。它从类路径加载类文件。默认情况下,类路径设置为当前目录。您可以使用“-cp”或“-classpath”开关更改类路径。它也被称为应用程序类加载器。

 

输出:

 

这些是 Java 提供的内部类加载器。 如果要创建自己的类加载器,则需要扩展 ClassLoader 类。

2)类(方法)区
Class(Method) 区域存储每个类的结构,例如运行时常量池、字段和方法数据、方法的代码。

3) 堆
它是分配对象的运行时数据区。

4) 堆栈
Java Stack 存储帧。 它保存局部变量和部分结果,并在方法调用和返回中发挥作用。
每个线程都有一个私有 JVM 堆栈,与线程同时创建。

每次调用方法时都会创建一个新框架。 框架在其方法调用完成时被销毁。

5) 程序计数器寄存器
PC(程序计数器)寄存器包含当前正在执行的 Java 虚拟机指令的地址。

6) 原生方法栈
它包含应用程序中使用的所有本机方法。

7) 执行引擎
它包含:

1、一个虚拟处理器

2、解释器:读取字节码流然后执行指令。

3、Just-In-Time(JIT)编译器:用于提高性能。 JIT 同时编译具有相似功能的部分字节码,从而减少编译所需的时间。 这里,术语“编译器”是指从Java虚拟机(JVM)的指令集到特定CPU的指令集的翻译器。

 8) Java 原生接口
Java Native Interface (JNI) 是一个框架,它提供了一个接口来与用另一种语言(如 C、C++、Assembly 等)编写的另一个应用程序进行通信。Java 使用 JNI 框架将输出发送到控制台或与 OS 库进行交互。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柒柒--技术翻译

有钱的捧个钱场咯~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值