jre解释中的一些细微差别

时间:2014-12-16 19:39:25

标签: java eclipse java-ee jvm java-api

据我了解

JVM: Java虚拟机(JVM)是​​可以执行Java字节码的虚拟机。它是Java软件平台的代码执行组件。 JVM将字节代码解释为机器代码

JRE: Java Runtime Environment包含JVM,类库。 它需要运行Java程序。你不能用它编译Java程序

JDK: jre +开发工具,如调试器,编译器(javac),java(启动器)

问题1:只能使用jdk进行编译吗?我的意思是获取.class文件?

问题2:JRE需要运行java吗?它是如何运行的,如果它不能编译类?

问题3:如果JRE无法编译,为什么JRE会提供jvm?

问题4:我是否错过了jdk解释中的内容?

5 个答案:

答案 0 :(得分:2)

考虑下载JRE,JDK并自行检查问题。你永远不知道我们是否在这里说实话,你知道......

您正在混淆编译的两个阶段。

  1. javac是JDK的一部分,将.java编译为.class字节码。

  2. Hotspot JVM(JRE的一部分)将频繁使用的字节码编译为优化的机器代码。

  3. 它可以将.class编译为机器代码,但不能.java编译为.class

  4. java(运行时)是JRE的一部分,而不是JDK。

答案 1 :(得分:2)

问:可以只用jdk编译吗?我的意思是获取.class文件?
答:是的,例如 javac Main.java 将生成 Main.class

问:JRE需要运行java吗?如果它不能编译类怎么运行?
答:例如,我给你一个.class文件,你可以在你的jre上运行它。 .clas是由我编译的,你只需要运行它。

问:为什么JRE如果无法编译就提供jvm?
答:JRE适用于客户。他们不需要编译.java文件,只需要运行.class文件。开发人员需要编译生成.class文件的.java文件。

问:我在jdk解释中遗漏了什么吗? 答:没有。

答案 2 :(得分:2)

为了更好地理解这些差异,你应该知道Java在它推出时如此受欢迎的承诺。

  • WORA - 随处写一次运行
  • 平台独立性(并非完全但主要是)

如果您编写C程序,则需要将.c文件编译为Windows上的.exe文件,该文件不适用于类似* NIX的环境。因此,您生成的二进制文件(在本例中为.exe)取决于您的平台。如果要在Linux上运行相同的C程序,则必须在该平台上再次编译.c文件。但是为了使Java二进制文件(通常是.jar文件)可以在多个平台上移植,他们提出了一个名为JRE的统一环境,它将负责在所有平台上执行二进制文件。如果您从Oracle网站下载过Java,您会发现不同的文件(exe,rpm,tar.gz适用于不同的平台,如Windows,Linux,Solaris,Mac等)

编译的任何.java总是会提供一个.class文件,这是您的JVM可以理解的文件。无论您是在Windows还是Mac上编译它,结果类文件总是相同的。

JRE是运行java程序所需要的。确保在Windows上编写和编译的程序在Linux服务器上执行的程序。它不需要您用英语编写的花哨源代码来执行您的程序。这就是为什么大多数新操作系统安装只安装了JRE而不安装JDK的原因,因为这就是你所需要的。

JDK适用于在java中开发应用程序/程序然后分发供其他人使用的开发人员。但是,通常开发的人员也会在本地计算机上运行这些程序来测试/调试他们的代码。为方便起见,JRE包含在JDK发行版中。 JVM是实际的举重工具,是JRE的一部分,它将程序指令转换为机器特定的汇编代码,并在CPU上执行以完成工作。

希望这能回答你的问题:)

答案 3 :(得分:1)

这个网站上有很多线程可以解释这些差异。 JDKJRE的超集。顾名思义:JDKdevelopment环境,其中还包含runtime,即JRE。

请参阅one of my answers on this subject获取解释,其中有一个链接可以将您带到其中一个问题。

编辑1:谷歌也让我"difference-between-jvm-jdk-jre-openjdk"

答案 4 :(得分:1)

简而言之:

  1. javac将.java(带有java代码的文本文件)编译成.class文件(Java字节代码)。
  2. JVM解释(通常只是及时编译).class文件中的Java字节代码来运行它们。
  3. JRE还包括Java类库,即实现Java库的.jar存档中的.class文件集。
  4. 我认为您错过的是Java中通常有两个编译阶段:一次编译.java文本文件到.class Java字节代码,这是由开发人员使用JDK和Java字节代码完成的 - 将字节代码及时编译为由JVM完成的机器代码,这在执行Java字节代码时完全透明地完成。

    现在,有时情况会变得复杂一些。例如,eclipse JDT包含自己不同于javac的java编译器,因此不需要JDK将java文件编译为java字节码,只需要一个JRE。它需要JRE,因为eclipse是一个Java应用程序,作为一组包含Java字节代码和其他资源文件的JAR文件提供。

相关问题