J2SE 的课程终于听完了!在总结的时候,发现我们在安装 JDK 的时候选择安装的 JRE 和 java 的核心机制 Java 虚拟机从功能上看好像是一个东西。如果一样为什么还要有两个名字呢?
既然不同,那他们又有什么样的关系呢?
先说一下什么是虚拟机:
那两天我在我机器上安装了一个虚拟机。试着看了看,安装过程就不说了非常简单。(用到了一个软件 VMware Workstation)。重新定义了硬盘大小,和内存大小,然后装上系统就可以使用了!
我们来看一下虚拟机的定义吧!虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。
那java虚拟机也是相同的了!同样有着虚拟出来的硬件设备。经过材料搜索发现java虚拟机还真是这样工作的。
什么是Java虚拟机
Java虚拟机是一个想象中的机器,在实际的计算机上通过软件模拟来实现。Java虚拟机有自己想象中的硬件,如处理器、堆栈、寄存器等,还具有相应的指令系统。
那为什么要有java虚拟机呢? 之前学习的vb、C#语言中好像没有听到过这样的名词!
这就不得不说一下java语言的特殊性。Java为解释性语言! 只需要编译一次(编译成java虚拟机可以读懂的文件),就可以在不同的运行环境中,通过java虚拟机把编译出来的程序,解释给运行环境,这样就可以运行了。
实现一次编译,到处运行的特点!
【此内容为转载 Java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机是实现这一特点的关键。一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码。而引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用模式Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。】
虚拟机大概知道了,那jre又是个什么东东啊?
我们在安装JDK的时候,有一个让我们选择安装JRE的阶段。其实安装JDK的时候已经自动安装了一套JRE,在<JDK安装目录下>\jre 。而我们如果选择了安装后面提示的JRE安装,又会有一套JRE安装在你的机器上,默认路径为:C:\Program Files\Java(路径可以自定义)。
关于这两套JRE的区别就不多说了,网上有好多的答案。我们现在来说说JRE和JVM的具体的区别。(个人意见)
JVM(Java Virtual Machine)是java虚拟机,而JRE(Java Runtime Environment)是java运行环境。
从百度百科上查到JRE包含JVM。JVM是个虚拟机,虚拟出来的计算机——一个适合java程序运行的计算机。用来运行java编译出来的class文件的和实际操作系统平台没有关系。在百度百科上这样一段话:“JVM屏蔽了与具体操作系统平台相关的信息,使Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。……”正如我上面所描述。
“JVM在执行字节码时,实际上最终还是把字节码解释成具体平台上的机器指令执行。编译虚拟机的指令集与编译微处理器的指令集非常类似。”这也是摘自百度百科上的原话,看起来好像和上面有写矛盾,上面已经说了JVM屏蔽了具体的操作系统平台,那怎么他还和操作系统又关系呢?
个人认为,像具体平台解释字节吗的并不是虚拟机本身而是,JRE中除了JVM的其他部分。如下图所示:
通过JRE的其余部分检测具体平台(是多少位机,是什么操作系统等等)。之后将JVM运行的java程序解释成具体平台可以读懂的语言执行。
大体上jre和jvm的关系说明白了,不过只是个人猜测。请多指教!