JVM JDK 和 JRE

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

JVM

Java 虚拟机JVM是运行 Java 字节码的虚拟机。JVM 有针对不同系统的特

定实现WindowsLinuxmacOS目的是使用相同的字节码它们都会给

出相同的结果。

什么是字节码?采用字节码的好处是什么?

在 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 编译器的。

总结Java 虚拟机JVM是运行 Java 字节码的虚拟机。JVM 有针对不同系

统的特定实现WindowsLinuxmacOS目的是使用相同的字节码它们

都会给出相同的结果。字节码和不同系统的 JVM 实现是 Java 语言“一次编

译随处可以运行”的关键所在。

JDK 和 JRE

JDK 是 Java Development Kit它是功能齐全的 Java SDK。它拥有 JRE 所拥有

的一切还有编译器javac和工具如 javadoc 和 jdb。它能够创建和编

译程序。

JRE 是 Java 运行时环境。它是运行已编译 Java 程序所需的所有内容的集合

包括 Java 虚拟机JVMJava 类库java 命令和其他的一些基础构件。但

是它不能用于创建新程序。

如果你只是为了运行一下 Java 程序的话那么你只需要安装 JRE 就可以了。

如果你需要进行一些 Java 编程方面的工作那么你就需要安装 JDK 了。但

是这不是绝对的。有时即使您不打算在计算机上进行任何 Java 开发仍然需要安装 JDK。例如如果要使用 JSP 部署 Web 应用程序那么从技术上讲

您只是在应用程序服务器中运行 Java 程序。那你为什么需要 JDK 呢因为应用

程序服务器会将 JSP 转换为 Java servlet并且需要使用 JDK 来编译

servlet。

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6