节:JVM的位置

Posted 李阿昀

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了节:JVM的位置相关的知识,希望对你有一定的参考价值。

在上一讲,我给大家详细介绍了虚拟机和Java虚拟机这两个概念,而在这一讲,我们则会从几个不同的角度来看一下JVM它所处的一个位置。

首先,我们先来看一下下面这张图,相信下图对大家来说应该不会陌生,因为在上一讲中我们就看到过相类似的图。

从上图中可以看到,我们会先基于具体的硬件安装相应的操作系统,然后再在操作系统之上安装Java虚拟机,最后便是使用Java虚拟机来解释运行用户提供的字节码文件了。

在上一讲中,我们提到过虚拟机可以分为系统虚拟机和程序虚拟机,相信大家应该对它俩还有印象吧!如果忘记了,那么这里我再讲一遍。系统虚拟机完全就是对物理计算机的一个仿真,而程序虚拟机典型的代表就是Java虚拟机,即基于操作系统之上的解释运行Java应用程序的虚拟环境。

注意,Java虚拟机是运行在操作系统之上的,它与硬件没有直接的交互,关于这点,大家头脑一定要清楚。此外,还有一点需要大家注意,就是在安装JDK的时候,大家需要关注到底是要把JDK安装在哪个操作系统上,这是因为在不同的操作系统上安装的JVM是有区别的。

下面,我们再来看一下这样一张图,大家应该看过这张图吧!这里我是想借助这张图来给大家说明一下JDK的构成。

JDK(Java Development Kit)是Java语言的软件开发工具包(SDK)。而且,JDK物理存在,它是Java Language、Tools、JRE和JVM的一个集合。关于这一点,相信大家也能从上图中看出来。

至于JDK、JRE和JVM三者之间的关系,相信不用我说大家也应该知道了。包括JDK的下载安装以及环境变量配置,这里我也不会讲了,因为再讲下去就不礼貌了,颇有点侮辱大家智商的意思。

学到这里,相信大家都知道了这一点,就是要想让编写好的Java程序成功运行,首先得经历一个编译的过程,即将.java的源文件编译成.class的字节码文件,当然,这一过程肯定是需要用到一个编译器的,该编译器我们通常称为前端编译器,前端编译器的典型代表就是javac,从上图中大家也能看到JDK当中就包括了我们提到的前端编译器这样的一个结构。

有了字节码文件之后,我们就可以进行解释运行了,当然,在解释运行的过程中我们又会碰到一个后端编译器,不过这都是后话了,但是很明显的一点是这些均属于JVM里面的内容。之前大家在学习的时候,我想重心应该都是放在了Java的相关API上,但从现在开始,大家就要慢慢开始将重心转移到JVM上了。

最后,我再啰里啰唆多说一点,不知道大家之前有没有写过安卓程序,写过的应该都知道安卓也是有类似这样的一个层次架构的,下图所示便是Google的android系统结构。

从上图中可以看到,安卓是基于Linux内核的,即Linux内核层,然后再往上就是Android系统运行库层了,这一层提供了相关各个方面的一些库,其中就有数据库相关的核心库,接着再往上便是Android应用框架层了,最后一层则是Android应用程序层。

其中,在Android系统运行库这一层,我们还能看到有一个Dalvik虚拟机,这里大家记住一句话就行,即每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。关于这个Dalvik虚拟机,它其实跟我们要学习的Java虚拟机没什么关系,当然,你要是将其理解为Java虚拟机的一个变种也不是不可以,只不过它解释运行的是.dex文件,而不再是.class文件了。

总之,具体应用程序在解释运行的时候,都需要为其提供一个虚拟的环境,在Android程序中是Dalvik虚拟机,在Java程序中则是Java虚拟机。

关于以上提到的这一点,大家仅做了解即可,没必要深究,因为我们毕竟是在学习JVM,嘻嘻😘!

以上是关于节:JVM的位置的主要内容,如果未能解决你的问题,请参考以下文章

节:JVM的位置

节:为什么要学习JVM?

节:为什么要学习JVM?

节:如何看待Java上层技术与JVM?

节:如何看待Java上层技术与JVM?

节:JVM的整体结构