JVM、JRE、JDK

JVM 、JRE、JDK之间的区别与联系

JVM
 Java 虚拟机(Java Virtual Machine)。它只认识 class 这种类型的文件,它能够将 class 文件中的字节码指令进行识别并调用操作系统向上的 API 完成动作。所以说,JVM是 Java 能够跨平台的核心。

 Java 能够跨平台运行的核心在于 JVM 。不是 Java 能够跨平台。而是它的 JVM能够跨平台。JVM是运行 Java 字节码的虚拟机。它有针对不同系统的特定实现(Windows,Linux,macOS),目的是使用相同的字节码,它们都会给出相同的结果。

什么是字节码?采用字节码的好处是什么?
 在 Java 中,JVM 可以理解的代码就叫做字节码(即扩展名为 .class 的文件),它不面向任何特定的处理器,只面向虚拟机。Java 语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。所以 Java 程序运行时比较高效,而且,由于字节码并不针对一种特定的机器,因此,Java 程序无须重新编译便可在多种不同操作系统的计算机上运行。

Java 程序从源代码到运行一般有下面 3 步:在这里插入图片描述
注: .class文件到机器码这一步骤。在这一步JVM 类先加载字节码文件,然后通过解释器逐行解释执行,这种方式的执行速度会相对比较慢。而且有些方法和代码块是经常需要被调用的(热点代码),所以后来引入了JIT(编译器),而 JIT 属于运行时编译。当 JIT 编译器完成第一次编译后,其会将字节码对应的机器码保存下来,下次可以直接使用。而我们知道,机器码的运行效率肯定是高于 Java 解释器的。这也解释了我们为什么经常会说 Java 是编译与解释共存的语言。

拓展:
HotSpot 采用了惰性评估(Lazy Evaluation)的做法,根据二八定律,消耗大部分系统资源的只有那一小部分的代码(热点代码),而这也就是JIT所需要编译的部分。JVM会根据代码每次被执行的情况收集信息并相应地做出一些优化,因此执行的次数越多,它的速度就越快。JDK 9 引入了一种新的编译模式 AOT(Ahead of Time Compilation),它是直接将字节码编译成机器码,这样就避免了 JIT 预热等各方面的开销。JDK 支持分层编译和 AOT 协作使用。但是 ,AOT 编译器的编译质量是肯定比不上 JIT 编译器的。

JRE
在这里插入图片描述

 Java 运行时环境(Java Runtime Environment)。class文件在运行时需要调用各种java的类库,即jvm要想运行class文件必须要依赖jre中的lib库。它相对于 JVM 来说,多出来的是一部分的 Java 类库。可以认为,JVM + lib组成JRE。

JDK
在这里插入图片描述
 Java 开发工具包(Java Development Kit)。目录下真正在运行java时起作用的是以下四个文件夹:bin、include、lib、jre。

  • bin:最主要的是编译器(javac.exe)
  • include:java和JVM交互用的头文件
  • lib:类库
  • jre:java运行环境

 jdk 是整个 Java 开发的核心,它集成了 jre 和一些好用的小工具。例如:javac.exe,java.exe,jar.exe 等。jdk主要面向开发者,具有java的编译功能,jre主要面向用户,主要是class文件的运行,假如我们只有编译好的class文件和jre,那么就可以运行class了。

这三者的关系一层层的嵌套关系。JVM<JRE<JDK。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值