Java jdk介绍及运行机制

参考

参考b站:https://www.bilibili.com/video/BV1fh411y7R8?p=11
JRE有3个核心功能:https://www.zhihu.com/question/270438711
java—JDK和jre目录结构:https://blog.csdn.net/qq_40177185/article/details/127813736
jre/bin目录下面工具说明 :https://blog.csdn.net/huyuminno1/article/details/84707533
为何在JDK安装路径下存在两个JRE?:https://blog.csdn.net/qq_44165157/article/details/129051386
JDK中的jre和外部jre的区别:https://blog.csdn.net/ZZH22225555/article/details/129921771
浅谈JDK JRE JVM三者的区别:https://blog.csdn.net/weixin_46402869/article/details/108693185

引出jdk

1
Test.class能在不同操作系统上运行的原因:每个操作系统上都有对应的JVM(不同操作系统的JVM也不同)。.class文件能实现所谓的 “跨平台性” 是由JVM来支撑的,实际上是由JVM帮助我们来做解释,翻译,执行的工作。即,若想执行.class文件,必须要有JVM,那么怎么去安装JVM呢?答:JVM是包含在jdk内的,故我们需要安装jdk,如此我们便拥有了JVM,就可以运行.class文件了。

Java核心机制-Java虚拟机[JVM java virtual machiine]

(1)JVM是一个虚拟的计算机(像普通计算机一样,该有的它都会有),具有指令集并使用不同的存储区域。负责执行指令,管理数据、内存、寄存器,包含在JDK中。
(2)对于不同的平台,有不同的虚拟机。
(3)Java虚拟机机制屏蔽了底层运行平台的差别(掩盖了计算机硬件和操作系统的差异,对.class提供了统一的执行接口),实现了“一次编译,到处运行”。
0

Java 执行流程分析

1

1
文字说明:Java编译器在JDK的Java工具中(javac),使用javac将源码(.java)转换为字节码(.class)文件,然后在JRE中运行.class文件,再通过JVM将字节码文件(扩展名为.class的文件)解释成具体系统平台的机器指令。【在JRE上运行字节码->在JVM上解释这些字节码】

什么是编译

1

什么是运行

2重点:运行的本质就是将对应的.class文件装载到JVM进行执行。

Java 程序执行流程图

2
在编译期,将java代码翻译为字节码文件的过程经过了四个步骤,词法分析,语法分析,语义分析,代码生成四个步骤:

在这里插入图片描述

需要了解的是并不是所有的 Java 虚拟机都采用解释器与编译器并存的运行架构, 但是主流的 Java 虚拟机,比如说 HotSpot 内部就同时包含解释器和编译器。

至于为何解释器和编译器共存,是因为两者各有优势。

1、当程序需要迅速启动和执行的时候,解释器可以首先发挥作用,省去编译的时间,立即运行。

2、当程序启动后,随着时间的推移,编译器逐渐发挥作用, 把越来越多的代码编译成本地代码,这样可以减少解释器的中间损耗,获得更高的执行效率。

在整个 Java 虚拟机执行架构里,解释器与编译器经常是相辅相成地配合工作。

JDK、JRE、JVM

  • JDK
    1、JDK的全称(Java Development Kit Java开发工具包)JDK = JRE + Java 的开发工具 [java,javac,javadoc,javap等]
    2、JDK是提供给Java开发人员使用的,其中包含了java的开发工具,也包括了JRE。所以安装了JDK,就不用再单独安装JRE了。
  • JRE
    1、JRE(Java Runtime Environment Java运行环境)JRE = JVM + Java 的核心类库[类]
    2、包括Java虚拟机(JVM Java Virtual Machine)和Java程序所需的核心类库等,如果想要运行一个开发好的Java程序,计算机中只需要安装JRE即可。

展开来说,JRE有3个核心功能:
● 加载代码: 由类加载器(class loader)完成
● 校验代码: 由字节码校验器(bytecode verifier)完成
● 执行代码: 由运行时解释器(runtime interpreter)完成

  • JDK、JRE和JVM的包含关系
    1、JDK = JRE + 开发工具箱(例如javac,java编译工具等)
    2、JRE = JVM + Java SE标准类库(java核心类库)
    13、如果只想运行开发好的.class文件 只需要JRE [Kim]
    通常来说,安装JDK后,Java目录下有jdk和jre两个文件夹,但jdk下还有一个jre文件夹,而且这个jre比前面那个jre在bin目录下多了个server文件夹。但有时也可能没有显式,如我自己的文件夹目录中jdk文件夹下就没有jre文件夹,但其实这里已经包含jre的bin目录下的所有文件,legal目录以及lib目录,如下面的目录结构所示。

jre和jdk的目录结构

jre(java运行环境)
1

  • 包含了java虚拟机:在bin/client目录下(bin目录下也有java.exe,也证明了只需要jre就能运行开发好的.class文件)
  • 包含了java基础类库:lib目录
  • 法律文件:legal目录

JDK目录结构
1JDK(java开发套件)

  • JDK包含了JRE(包含jre的bin目录下的所有文件,legal目录以及lib目录)
  • 同时还包含了编译java源码的编译器javac,还包含了很多java程序调试和分析的工具:jconsole,jvisualvm等工具软件(bin目录下)工具说明参考工具说明
  • 还包含了java程序编写所需的文档和demo例子程序
  • include目录存放开放JDK所使用的c语言的头文件
  • conf目录存放JDK相关配置文件
  • Jmods目录该路径下存放了JDK的各种模块

jdk/bin目录下的常用工具

  • javac:Java编译器,将Java源代码换成字节代
  • java:Java解释器,直接从类文件执行Java应用程序代码
  • javadoc:根据Java源代码及其说明语句生成的HTML文档
  • javap:Java反汇编器,显示编译类文件中的可访问功能和数据,同时显示字节代码含义
  • jar:多用途的存档及压缩工具,是个java应用程序,可将多个文件合并为单个JAR归档文件

为何在JDK安装路径下存在两个JRE

"两个jre"和"三个lib"的功能简单扼要的解释:
安装JDK后,Java目录下有jdk和jre两个文件夹,但jdk下还有一个jre文件夹,而且这个jre比前面那个jre在bin目录下多了个server文件夹!
① 普通用户装jre即可。
② 开发人员需要安装jdk,其中包括jre。所以jdk目录下包括jre目录。两个jre大体相同,有细微的差别。
两套 jre ,是针对不同的工作职责!不同的 jre 负责各自范围的内容!
① 当用户只需要执行 java 的程序时,那么C:\Program Files\Java\jre1.5.0_08的 jre 就 ok 。
② 当用户是 java 程序员,则需要 java 开发环境。编译时,系统就会优先去找C:\Program Files\Java\jdk1.5.0_08\bin下的“ java 、 javac ”这些命令所在目录 或者 他们的父目录的 jre (即jdk下的jre)。即开发环境下运行的是 jdk 下的 jre 。

再说三个lib目录:
JDK下的lib包括java开发环境的jar包,是给JDK用的,例如JDK下有一些工具,可能要用该目录中的文件。例如,编译器等。
JRE下的lib只是运行java程序的jar包,是为JVM运行时候用的。包括所有的标准类库,和扩展类。
JDK下的JRE下的lib是开发环境中,运行时需要的jar包。最典型的表现就是导入的外部驱动jar包。因为编译时,系统找的是jdk下的jre,因此需要导入上级目录中开发环境的jar包,即导入的外部驱动jar包。

jdk中的jre和外部jre的区别和联系

1、区别

  • 面向人群不同
    JDK是提供给程序员使用的。JRE是提供给想运行java程序的用户使用的
  • 重要程度不同
  • 如果安装jdk,电脑会有两套jre,一套是jdk中的jre,位于 \jre 目录下。另外一套是jre自己的

2、联系

  • 包含关系
    JDK包含了JRE,同时还包含了编译java源码的编译器javac,还包含了很多java程序调试和分析的工具JConsoleWeb Services等工具软件)
  • 执行关系
    在这里首先就要提到JVM,JVM(Java Virtual Machine)就是我们常说的java虚拟机,它是整个java实现跨平台的最核心的部分,所有的java程序会首先被编译为.class的类文件,这种类文件可以在虚拟机上执行。也就是说class并不直接与机器的操作系统相对应,而是经过虚拟机间接与操作系统交互,由虚拟机将程序解释给本地系统执行
    1

只有JVM还不能成class的执行,因为在解释class的时候JVM需要调用解释所需要的类库lib,而jre包含lib类库。在JDK下面的的jre目录里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和 lib和起来就称为jre

JDK JRE JVM三者的区别

  • 区别
  1. JDK和JRE区别:在bin文件夹下会发现,JDK有javac.exe而JRE里面没有,javac指令是用来将java文件编译成class文件的,这是开发者需要的,而用户(只需要运行的人)是不需要的。JDK还有jar.exe, javadoc.exe等等用于开发的可执行指令文件。这也证实了一个是开发环境,一个是运行环境。
  2. JRE和JVM区别:JVM并不代表就可以执行class了,JVM执行.class还需要JRE下的lib类库的支持。
  • 总结
  1. 有JVM就可以解释执行字节码文件(.class)。
  2. JVM解释执行这些字节码文件的时候需要调用类库,如果没有这些类库JVM就不能正确的执行字节码文件,JVM+类库=JRE。
  3. 有了JRE就可以正确的执行java程序了,但是光有JRE不能开发Java程序,所以JRE+开发工具=JDK,有了JDK,就可同时开发,执行Java程序。
  4. JRE只能运行已经编译好的字节码文件即后缀名为.class的文件。如果只安装了JRE,没有安装JDK,是不能运行源代码的,因为没有Java编译器,JRE无法获得.class文件。

[Kim]:综上所述,我们可以知道jre中是有java.exe,即如果有开发好的.class文件 只需要JRE也可以运行;但jre中没有javac.exe,故无法实现源文件的编译。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值