龙空技术网

Java核心面试知识点-请简单描述JVM包含哪些部件?

从程序员到架构师 167

前言:

当前同学们对“java文件管理框架”都比较讲究,看官们都需要了解一些“java文件管理框架”的相关知识。那么小编同时在网摘上收集了一些关于“java文件管理框架””的相关文章,希望咱们能喜欢,我们一起来了解一下吧!

简单介绍一下

JVM(Java Virtual Machine)Java虚拟机,为什么被称为是虚拟机呢?就是因为他能够模拟计算机来运行Java的字节码文件,而所谓的虚拟机,就是通过虚拟化技术模拟出来的计算机运行环境。所以说其主要的部分就是会涉及到数据数据的读写,存储,逻辑处理。根据这个思路,我们来分析一下JVM中主要包含了如下的一些部件。

字节码指令集程序寄存器虚拟机栈虚拟机堆方法区垃圾回收器

这些部件都是运行在JVM之上的,它们本身是不需要与计算机硬件资源直接进行交互。也就是说所有的程序运行,包括内存的分配以及内存的回收都是在JVM中来完成的,如下图所示,图片来源网络。

Java原文件到Java字节码文件

在我们安装完成Java环境变量之后通过java -version命令就可以查看到本地的Java版本。由于在很多地方我们使用的还是JDK1.8版本,所以这里我们演示还是使用JDK1.8来进行演示。

java version "1.8.0_211"Java(TM) SE Runtime Environment (build 1.8.0_211-b12)Java HotSpot(TM) 64-Bit Server VM (build 25.211-b12, mixed mode)

Java源文件在通过编译器之后,会被编译成对应的class后缀的字节码文件。然后Class字节码文件又可以被不同平台中的JVM环境解释成支持不同平台的机器码文件在不同的平台中运行,这就是Java跨平台特性的原因。如下所示。

(base) root:jvm root$ vim Hello.java (base) root:jvm root$ javac Hello.java (base) root:jvm root$ lsHello.class	Hello.java(base) root:jvm root$ 

我们就可以把生成的class后缀的的字节码文件放在任意平台的JVM进行解释运行。

为什么每种平台对应的JVM是不一样的但是却可以解释运行同一个Class字节码文件呢?

这是因为,虽然平台是不同的,但是基于虚拟机实现的解释器工作原理是一样的。也就是说当我们运行了一个Java应用的时候,虚拟机就被创建了。如果有多个应用,那么就会实例化多个虚拟机的实例,当我们运行的Java进程退出或者是因为异常关闭的时候,那么对应的虚拟机也就会被销毁。

由于每个应用是独立的,所以每个被实例化的虚拟机也是独立的,也就是说多个虚拟机之间是不能进行数据共享的。

Java程序具体运行

通过上面的介绍我们可以看到,通过javac命令可以将一个Java源文件编译成class字节码文件。而在JVM运行的过程中会将字节码文件进一步的解释成为对应系统的机器码,接下来就是机器码需要根据操作系统的本地方法支持来调用相应的方法执行代码逻辑。

所以在JVM中还包括了如下的一些组件内容。

类加载子系统(Class Loader SubSystem)运行时数据区(Runtime Data Area)执行引擎和本地接口库(Native Interface Library)

其中,本地接口库通过调用本地的方法库的内容与操作系统进行了一个交互。而类加载子系统则是负责将编译好的Class字节码文件加载到JVM中;运行时数据区域则主要是用来存储在JVM运行的过程中所产生的数据;执行引擎功能则是包括了即时编译器和垃圾回收器两部分的内容,其中即时编译器是将加载到的字节码文件翻译成计算机机器语言,而垃圾收集器的作用则是用来回收在程序运行过程中不再被使用的对象,来释放内存操作。这也是Java的又一大特性之一,自动内存管理模型的底层支持。

总结

上面我们介绍了关于JVM的运行原理,并且介绍了在JVM中主要包含了一些组件。也介绍了这些组件都完成了哪些功能。在面试的时候,面试官会问道JVM中主要包含哪些部件,并且会问到这些部件都是用来干什么的。希望大家多多关注,后续还会为大家带来更多面试实战干货。

标签: #java文件管理框架