据我了解
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解释中的内容?
答案 0 :(得分:2)
考虑下载JRE,JDK并自行检查问题。你永远不知道我们是否在这里说实话,你知道......
您正在混淆编译的两个阶段。
javac
是JDK的一部分,将.java
编译为.class
字节码。
Hotspot JVM(JRE的一部分)将频繁使用的字节码编译为优化的机器代码。
它可以将.class
编译为机器代码,但不能.java
编译为.class
。
java
(运行时)是JRE的一部分,而不是JDK。
答案 1 :(得分:2)
答案 2 :(得分:2)
为了更好地理解这些差异,你应该知道Java在它推出时如此受欢迎的承诺。
如果您编写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)
这个网站上有很多线程可以解释这些差异。 JDK
是JRE
的超集。顾名思义:JDK
是development
环境,其中还包含runtime
,即JRE。
请参阅one of my answers on this subject获取解释,其中有一个链接可以将您带到其中一个问题。
编辑1:谷歌也让我"difference-between-jvm-jdk-jre-openjdk"。
答案 4 :(得分:1)
简而言之:
我认为您错过的是Java中通常有两个编译阶段:一次编译.java文本文件到.class Java字节代码,这是由开发人员使用JDK和Java字节代码完成的 - 将字节代码及时编译为由JVM完成的机器代码,这在执行Java字节代码时完全透明地完成。
现在,有时情况会变得复杂一些。例如,eclipse JDT包含自己不同于javac的java编译器,因此不需要JDK将java文件编译为java字节码,只需要一个JRE。它需要JRE,因为eclipse是一个Java应用程序,作为一组包含Java字节代码和其他资源文件的JAR文件提供。