专注Java教育14年 全国咨询/投诉热线:444-1124-454
星辉LOGO图
始于2009,口口相传的Java黄埔军校
首页 hot资讯 JVM虚拟机的架构

JVM虚拟机的架构

更新时间:2021-11-19 09:47:06 来源:星辉 浏览588次

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

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

什么是JVM

这是:

一个规范,其中Java虚拟机的工作被指定。但是实现提供者可以独立选择算法。它的实现已经由 Oracle 和其他公司提供。

一个实现它的实现被称为 JRE(Java 运行时环境)。

运行时实例每当您在命令提示符下编写 java 命令来运行 java 类时,就会创建一个 JVM 实例。

它能做什么

JVM 执行以下操作:

加载代码

验证代码

执行代码

提供运行环境

JVM 为以下各项提供了定义:

存储区

类文件格式

寄存器组

垃圾收集堆

致命错误报告等。

JVM架构

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

1.类加载器

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

(1)Bootstrap ClassLoader:这是第一个类加载器,它是 Extension 类加载器的超类。它加载rt.jar文件,其中包含 Java 标准版的所有类文件,如 java.lang 包类、java.net 包类、java.util 包类、java.io 包类、java.sql 包类等。

(2)扩展类加载器:这是 Bootstrap 的子类加载器和系统类加载器的父类加载器。它加载位于$JAVA_HOME/jre/lib/ext目录中的 jar 文件。

(3)System/Application ClassLoader:这是扩展类加载器的子类加载器。它从类路径加载类文件。默认情况下,类路径设置为当前目录。您可以使用“-cp”或“-classpath”开关更改类路径。它也称为应用程序类加载器。

//Let's see an example to print the classloader name  
public class ClassLoaderExample  
{  
    public static void main(String[] args)  
    {  
        // Let's print the classloader name of current class.   
        //Application/System classloader will load this class  
        Class c=ClassLoaderExample.class;  
        System.out.println(c.getClassLoader());  
        //If we print the classloader name of String, it will print null because it is an  
        //in-built class which is found in rt.jar, so it is loaded by Bootstrap classloader  
        System.out.println(String.class.getClassLoader());  
    }  
}     

输出:

sun.misc.Launcher$AppClassLoader@4e0e2f2a 
null

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

2.类(方法)区

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

3.堆

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

4.堆栈

Java Stack 存储帧。它保存局部变量和部分结果,并在方法调用和返回中起作用。

每个线程都有一个私有 JVM 堆栈,与线程同时创建。

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

5.程序计数器寄存器

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

6.本地方法栈

它包含应用程序中使用的所有本机方法。

7.执行引擎

它包含了:

虚拟处理器

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

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

8.Java 本地接口

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

通过上述相信大家对JVM虚拟机的架构已经有所了解,若想了解更多相关知识,不妨来关注一下星辉的Java虚拟机视频,里面有更多的知识在等着大家去学习,希望对大家能够有所帮助。

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>