据我所知
JVM: Java虚拟机(JVM)是可以执行Java字节码的虚拟机。它是Java软件平台的代码执行组件。JVM将字节码解释为机器代码。
JRE:包含JVM,类库。它需要运行Java程序。不能用它编译Java程序
JDK: jre +开发工具,如调试器、编译器(javac)、java (启动程序)
问题1:只使用jdk编译是可能的?我是说拿到.class文件?
问题2: JRE需要运行java吗?如果它不能编译类,它是如何运行的?
问题3:如果JRE不能编译,为什么要提供jvm?
问题4:我是否遗漏了jdk解释中的一些内容?
发布于 2014-12-16 19:50:33
问:只使用jdk编译是可能的?我是说拿到.class文件?
答:是的,例如javac Main.java将生产Main.class
问: JRE需要运行java吗?如果它不能编译类,它是如何运行的?
答:例如,我给您一个.class文件,您可以在jre上运行它。.clas是由我编译的,您只需运行它。
问:如果JRE不能编译,为什么要提供jvm?
JRE是给客户的。他们不需要编译.java文件,只需要运行.class文件。开发人员需要编译.java文件,这会产生.class文件。
问:我是不是漏掉了jdk的解释?
答:没有。
发布于 2014-12-16 19:43:56
考虑下载JRE、JDK并自己检查问题。你永远不知道我们是不是在说真话,你知道.
你把汇编的两个阶段搞混了。
javac是JDK的一部分,它将.java编译成.class字节码。.class编译成机器代码,但不能将.java编译为.class。java (运行时)是JRE的一部分,而不是JDK。发布于 2014-12-16 20:50:05
为了更好地理解差异,您应该了解Java的承诺,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服务器上执行的程序。它不需要你的花哨的英文源代码来执行你的程序。这就是为什么大多数新的OS安装都只安装了JRE,而没有安装JDK,因为这就是您所需要的。
JDK面向在java中开发应用程序/程序的开发人员,然后为其他开发人员分发给use.But,通常开发人员也在本地机器中运行这些程序来测试/调试他们的代码。为了方便这一点,JRE包含在JDK发行版中。JVM是实际的举重人员,是JRE的一部分,它将把程序指令翻译成机器特定的汇编代码,并在CPU上执行以完成工作。
希望这能回答你的问题:)
https://stackoverflow.com/questions/27512569
复制相似问题