JDK&JRE&JVM三者之间的关系
Java是什么
Java是一门面向对象的编程语言,可以编写应用程序application(简称app);
Java是由C++语言编写,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。
Java语言特点
- 开源(开放源代码)性:开源表示免费,开放源代码
- 面向对象性:Java语言中非常重要的一种编程理念,万物皆对象
- 跨平台性:Java语言的使用可以无视操作系统之间的差异性
- 编译性:Java代码编写完成后,需要经过编译过程,将.java文件编译成.class文件,java文件称为源文件, 计算机无法直接识别java文件, 因此编译成.class字节码文件
- 动态性:java代码在执行过程中,可以修改内容
在Java语言中,最大的优点就是跨平台性,那么Java是如何实现跨平台的?
Java跨平台的实现
- 我们编写的Java源码,编译后会生成一种 .class 文件,称为字节码文件
- Java虚拟机(JVM)就是负责将字节码文件(.class文件)翻译成特定平台下的机器码然后运行。也就是说,只要在不同平台上安装对应的JVM,就可以运行字节码文件,运行我们编写的Java程序。
注意:跨平台的是Java程序,不是JVM。JVM是用C/C++开发的,不同平台下需要安装不同版本的JVM
- 特点:一次编译,到处运行
- 解释:Java语言代码编译一次,代码就可以在不同操作系统中运行,并且还能得到相同的运行结果
Java语言的使用可以无视操作系统之间的差异性
JVM : Java虚拟机,理解成一个软件,模拟计算机实现过程, 一个虚拟机就像是一个小型的计算机,主要功能就是可以运行标准的Java代码, JVM虚拟机为Java代码营造出相同运行环境
所以说,JVM是 Java 能够跨平台的核心
JVM&JRE&JDK简介
- JVM(Java Virtual Machine): Java虚拟机,是运行所有Java程序的假想计算机,是Java程序的运行环境,是Java 最具吸引力的特性之一.我们编写的Java代码,都运行在 JVM 之上.
- JRE(Java Runtime Environment): 是Java程序的运行时环境,但是单独的JVM虚拟机不能自己运行,需要支持JVM运行的功能代码,JRE包含 JVM 和运行时所需要的 核心类库
核心类库:很多功能代码, 代码太多, 为了便于管理, 因此将代码放置到一个库中管理.
JRE = JVM + JVM运行时需要的核心类库(支持、依赖)功能; - JDK (Java Development Kit): 是Java程序开发工具包,包含 JRE 和开发人员使用的工具,例如javac.exe(编译器) 和 javadoc.exe(可以自动为Java的代码生成说明文档)
JDK : 全称Java开发工具包, 主要功能就是可以进行Java代码的编译(编写), 还有运行
JDK = JRE + 开发时需要工具包;
三者关系
-
首先是JDK,JDK是 Java 语言的软件开发工具包(SDK)。
在JDK的安装目录下有一个jre目录
如下图所示(以电脑上安装的jdk1.8.0_201为例)
-
选择jre文件夹打开后,里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和 lib合起来就称为jre。如下图:
ps:大家可以找到自己电脑上jdk的安装路径看一下是否一样,加深一下印象
综上,三者的关系,下图清晰明朗
联系与区别
这里的内容是为了加深理解
- 我们利用JDK写了自己的JAVA代码程序后,通过JDK中的编译程序(javac)将我们的文本java文件编译成JAVA字节码,在JRE上运行这些JAVA字节码,JVM解析这些字节码,映射到CPU指令集或OS的系统调用。
- JRE:(Java运行环境)包含JVM标准实现及Java核心类库。JRE是Java运行环境,并不是一个开发环境,所以没有包含任何开发工具(如编译器和调试器)
- JDK和JRE区别:在jdk下的bin文件夹下会发现,JDK有javac.exe而JRE里面没有,javac指令是用来将java文件编译成class文件的,这是开发者需要的,而用户(只需要运行的人)是不需要的。JDK还有jar.exe, javadoc.exe等等用于开发的可执行指令文件。这也证实了jdk是开发环境,jre是运行环境。jdk是给开发人员使用的,jre和jvm是给普通用户使用。
- JRE和JVM区别:JVM并不代表就可以执行.class了,JVM执行.class还需要JRE下的lib类库的支持(rt.jar)
ps:可以结合上面的文件包含关系来理解
总之,JDK、JRE、JVM三者之间的关系非常重要!!!
一定要做到深刻理解并可以用自己的语言来描述