什么是Java虚拟机以及JDK,JRE,JVM的区别和联系

2022-12-02 10:45:14 浏览数 (1)

文章目录

  • 1官方定义
  • 2如何去理解Write Once Run AnyWhere
  • 3JDK JRE JVM 的区别和联系
    • 3.1JDK(Java SE Development Kit)
    • 3.2JRE(Java Runtime Environment)
    • 3.3JVM(Java Virtual Machine)
  • 4JDK JRE JVM的区别与联系

1官方定义

不要背,简单看看理解完事了

The Java Virtual Machine (JVM) is an abstract computing machine. The JVM is a program that looks like a machine to the programs written to execute in it. This way, Java programs are written to the same set of interfaces and libraries. Each JVM implementation for a specific operating system, translates the Java programming instructions into instructions and commands that run on the local operating system. This way, Java programs achieve platform independence 翻译一下: Java虚拟机(JVM)是一种抽象计算机器。JVM是一个程序,它看起来像是一台机器,用于编写并在其中执行的程序。通过这种方式,Java程序被写入同一组接口和库中。针对特定操作系统的每个JVM实现都将Java编程指令转换为在本地操作系统上运行的指令和命令。这样,Java程序就实现了平台独立性。

一句话:Java 虚拟机就是我们java应用的运行环境,Java语言使用Java虚拟机屏蔽操作系统和机器之间的差异,达到Write Once Run Anywhere

2如何去理解Write Once Run AnyWhere

我们大家都知道,通常由javac 去编译程序源代码,转换成Java字节码,JVM通过解析字节码文件,将其翻译成对应的机器指令,逐条读入,逐条解析。

对于大部分程序只需要关注前端编译,是将我们的javac 编译器把java文件编译成字节码,然后加载到JVM的这个流程,也是我们这节课的重点内容。

3JDK JRE JVM 的区别和联系

3.1JDK(Java SE Development Kit)

JDK(Java SE Development Kit),Java标准开发包,它提供了编译、运行Java程序所需的各种工具和资源,包括Java编译器(javac)、java运行时环境,以及常用的Java类库等等

下图是JDK的安装目录:

打开目录: D:sdkJavajdk1.8.0_321

bin文件夹下:里面我们最常用的就是javac.exe 、web services、javadoc、等等

jre文件夹下:java运行环境

lib文件夹下:java 的基础类库,比如dt.jar(有关于swing文件)、tools.jar

include文件夹下:java和JVM交互用的头文件(c .h文件)

3.2JRE(Java Runtime Environment)

JRE(Java Runtime Environment)Java运行环境,用于解析执行Java的字节码文件。普通用户而只需要安装JRE来运行Java程序。而程序开发者必须需要安装JDK来编译、调试程序。 下图是JRE的安装目录: 里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需的类库,而jvm和lib合起来就称为jre。

lib文件夹下:jvm工作所需的类库 bin文件夹下:jvm (这里可以理解为java虚拟机)

3.3JVM(Java Virtual Machine)

JVM(Java Virtual Machine),Java 虚拟机,是JRE内的一部分。它是整个Java 实现跨平台的最核心的部分,负责解析执行字节码文件的虚拟机计算机。所有平台的JVM向编译器提供相同的接口,而我们编译器只需要面向虚拟机,生成虚拟机能识别的代码(字节码),然后由虚拟机来解释执行。

4JDK JRE JVM的区别与联系

客户:我只需要运行Java应用,我就需要JRE。 开发者:我需要JDK里面的工具帮我编译源代码,而且需要JRE核心类库做支持,并且运行在JVM中测试应用程序。

0 人点赞