Java程序只是JRE的实例吗?

2022-08-31 11:55:59

在 Windows 中运行控制台应用程序(如用 C++ 编写的控制台应用程序)时,Windows 会为您创建一个控制台窗口。.exe

因此,从本质上讲,该程序不会在Windows本身以外的任何东西上运行。

当您在cmd.exe控制台内部调用时,它真的是自己的独立程序吗?感觉更像是程序在运行,只是给出一个参数。java Main.classjavaMain.class

所有这些都是要问,所有的Java程序都只是控制台程序吗?另一种问法是,所有Java程序都只是读取特定类文件的JRE程序/实例吗?java [argument]


答案 1

为了更简单地说,答案是:是的(尽管你真的是指JVM而不是JRE)。操作系统正在运行的程序是 JVM(Java 虚拟机),Java 应用程序是该程序正在读取的数据。JVM就像Microsoft Word,Java程序就像Word文档。

这个问题触及了编译语言和解释型语言之间的本质区别,正如这里所描述的那样。

为了进一步类比来解释JVM和JRE是什么......JVM就像Microsoft Word程序本身,JRE就像MS Word程序以及所有其他东西,如模板,示例文档,字体等,这些内容与它一起安装以支持它的功能。


答案 2

所有这些都是要问,所有的Java程序都只是控制台程序吗?java [argument]

不是那么具体,不,因为并非所有Java程序都是通过该工具运行的,但请继续阅读。java

另一种问法是,所有Java程序都只是读取特定类文件的JRE程序/实例吗?

Java程序通常由Java虚拟机(JVM)运行,例如Java运行时环境中的虚拟机,是的。也就是说,在大多数情况下,Java 程序(构成程序的类字节码和其他资源的集合,有时在 ///etc. 文件中)由 JVM 实例加载和运行,JVM 实例由工具或 servlet 容器(或者,在白天是小程序容器)或知道如何生成 JVM 实例的其他一些环境启动。.jar.war.earjava

通常,它是这样的:

  1. .java文件被编译为 Java 字节码,通常输出为文件。Java字节码是一种高级机器语言,不依赖于特定的CPU架构或操作系统。.class

  2. 有时,文件(和其他资源)被捆绑在一起到容器(文件,文件,文件等)中。.class.jar.war.ear

  3. 当需要运行程序时,您可以使用该工具或 Servlet 容器或某种知道如何运行 Java 字节码的其他类型的进程。这些是特定于 CPU 和操作系统的,并包含或加载 JVM。java

  4. 工具(或 servlet 容器或其他)中的代码加载字节码(来自文件或类似文件)并将其传递给 JVM 进行实例化和执行。根据JVM的不同,这可能只涉及解释字节码,或者将其编译为特定于CPU和操作系统的机器代码(“即时”[JIT]编译)并执行该编译,或两者的组合。例如,Sun的HotSpot JVM至少执行两个级别的JIT编译,具体取决于是否使用了特定的代码段来编译它,如果是这样,是否足以证明积极优化它是合理的。java.class

有些编译器将Java源代码或Java字节码编译为特定CPU架构和操作系统的机器代码,输出一体化可执行文件,但以上是通常的情况。


推荐