Java Class 库和 JVM

Java Class Library and JVM

我对 JVM 架构有点困惑。我们可以说 Java Class 库 JCL 是 Java 虚拟机 JVM 的一部分吗?

根据定义,JCL 是 Java 应用程序(不是 JVM)可以在 运行 时调用的库,我认为这是 JRE 的一部分。

根据 JVM specification

The Java virtual machine is an abstract computing machine ... [which] knows nothing of the Java programming language.

JCL 是实现 Java 语言所必需的。

因此您可以使用 JVM 实现您选择的任何 language 并且您可以 运行 Java 在任何合适的体系结构上执行程序。例如,Android 可以 运行 在 Android Runtime (ART) 上用 Java 编写的程序。

JVM(Java 虚拟机)是 JRE(Java 运行时环境)的一部分。

JCL(Java 库 类)和其他 API 一样也是 JRE 的一部分。

我知道这已经得到回答,但我觉得我应该添加一些解释来支持已经提出的一些观点:

JVM : 执行字节码,JCL提供可动态加载的运行time库,[=46=使用] JVM 执行的代码。

JRE至少需要运行 java程序,JRE由JVM和JCL组成

JVM :它是一个应用程序虚拟机,能够 运行 字节代码并在主机操作系统上执行它。

Java :简单地说,Java 是一种高级编程语言。它可以转换为字节码,最终可以在JVM上运行。

字节码 : 为了生成字节码,我们需要一个能够摄取源代码并生成字节码的编译器。

Byte code compiler : 理论上来说,byte code compiler 能够获取大多数现代语言的任何源代码(例如python, ruby , groovy, 等等)并生成字节码,前提是编译器已经实现了这样做。另一种可能的实现方式是将程序的源代码转换为java,然后调用java字节码编译器将生成的java程序转换为字节码,是这样的使用 jythonc,它采用 python 源代码并将其转换为 java,然后 java 代码最终转换为字节码。字节码编译器的例子就是上面描述的javac.

总而言之,JVM 能够运行任何语言,只要有语言程序源的编译字节码版本。

JCL(Java class 库) : Java class 库用于 java 程序,什么操作系统可重用 Dll 库是本机应用程序。它使得用 java 编写的程序可以调用通常由 Os 本机库公开的操作 system/hardware functions/routines。 JCL 通过提供对网络、io、本机 GUI 等本机功能的访问,从本机库的实现细节中抽象出 java 程序。

关注语言可能在这里效果最好。

JVM 是虚拟机,因此您可以将其视为类似于物理机器的东西,例如笔记本电脑、台式机或 phone。物理机允许您 运行 计算机程序,虚拟机也是如此。

JCL 是一个软件库,可帮助您 运行 在该计算机上编写自己的程序。它有点像你的操作系统所使用的存在于你的物理机器上的库,以及安装在该物理机器上的各种程序。您的代码也利用了机器提供的现有代码,它们一起构成了 运行 该机器上的计算机程序所需的所有代码。