JVM,JDK,JRE和OpenJDK有什么区别?
JVM , JDK , JRE和OpenJDK有什么区别?
我在用Java编程时遇到了这些短语,它们之间有什么区别?
JVM
Java虚拟机 (JVM)是运行Java字节码的虚拟机。 JVM不理解Java源代码,这就是为什么编译*.java
文件以获取包含JVM理解的字节码的*.class
文件的原因。 它也是允许Java成为“便携式语言”(写入一次,随处运行)的实体。 事实上,针对不同系统(Windows,Linux,MacOS,请参阅维基百科列表)的JVM有特定的实现,其目标是在相同的字节码上它们都会给出相同的结果。
JDK和JRE
为了解释JDK和JRE之间的区别,最好的方法是阅读Oracle文档并查阅图表:
Java运行时环境(JRE)
Java运行时环境(JRE)提供库,Java虚拟机和其他组件来运行用Java编程语言编写的小程序和应用程序。 另外,两个关键的部署技术是JRE的一部分:Java Plug-in,它使小程序可以在流行的浏览器中运行; 以及通过网络部署独立应用程序的Java Web Start。 它也是Java 2 Platform,Enterprise Edition(J2EE)中用于企业软件开发和部署的技术的基础。 JRE不包含用于开发小应用程序和应用程序的工具和实用程序,例如编译器或调试器。
Java开发工具包(JDK)
JDK是JRE的超集,包含JRE中的所有内容,以及用于开发小应用程序和应用程序所需的编译器和调试器等工具。
请注意,Oracle不是唯一提供JDK的人员。
OpenJDK的
OpenJDK是Java SE 7 JSR(JSR 336)的开源实现。 现在Oracle JDK和OpenJDK几乎没有区别。 去年,甲骨文做出了这个决定:转向OpenJDK作为正式的Java SE 7参考实现
这个博客中有不同之处:
问:在OpenJDK存储库中找到的源代码和用于构建Oracle JDK的代码有什么区别?
答:非常接近 - Oracle JDK发行版的构建过程基于OpenJDK 7构建,只需添加几个部分,如部署代码(包括Oracle的Java插件和Java WebStart实现)以及一些封闭源代码第三版第三方组件如图形光栅化器,一些开源第三方组件(如Rhino),以及其他一些零散件,比如附加文档或第三方字体。 展望未来,我们的目标是开放Oracle JDK的所有部分,除了那些我们认为商业特性如JRockit Mission Control(尚未在Oracle JDK中提供)的应用以外,还用开源替代品取代设防的第三方组件,以实现更接近的奇偶校验在代码库之间。
根据使用的版本,VM可能会有所不同:Sun / Oracle JDK,OpenJDK和HotSpot VM版本之间的对应关系
OpenJDK是一个特定的JDK实现。
JDK(Java开发工具包)
Java Developer Kit包含开发Java程序所需的工具,以及运行程序的JRE。 这些工具包括编译器(javac.exe),Java应用程序启动器(java.exe),Appletviewer等...
编译器将java代码转换为字节代码。 Java应用程序启动器打开JRE,加载类并调用其主要方法。
如果您想编写自己的程序并编译它们,您需要JDK。 对于运行Java程序,JRE就足够了。
JRE的目标是执行Java文件
即 JRE = JVM + Java包类(如util,math,lang,awt,swing等)+运行时库。
JDK主要针对Java开发。 也就是说,您可以创建一个Java文件(在Java包的帮助下),编译一个Java文件并运行一个java文件。
JRE(Java运行时环境)
Java运行时环境包含JVM,类库和其他支持文件。 它不包含任何开发工具,如编译器,调试器等。实际上,JVM运行该程序,并使用JRE中提供的类库和其他支持文件。 如果你想运行任何Java程序,你需要在系统中安装JRE
Java虚拟机提供了一种执行代码的独立于平台的方式; 这意味着在任何机器中编译一次,并在任何地方(任何机器)运行它。
JVM(Java虚拟机)
正如我们都知道,当我们编译一个Java文件时,输出不是'exe',而是'.class'文件。 '.class'文件由JVM可理解的Java字节代码组成。 Java虚拟机根据底层操作系统和硬件组合将字节代码解释为机器代码。 它负责垃圾收集,数组边界检查等所有事情...... JVM是平台相关的。
JVM被称为“虚拟”,因为它提供了一个不依赖于底层操作系统和机器硬件体系结构的机器接口。 这种独立于硬件和操作系统的独立性是Java程序的一次写入运行任意值的基石。
有不同的JVM实现。 这些可能在性能,可靠性,速度等方面有所不同。这些实现在Java规范没有提及如何实现这些功能的领域有所不同,比如垃圾收集过程如何工作取决于JVM,Java规范没有定义任何具体的方式来做到这一点。
链接地址: http://www.djcxy.com/p/72351.html上一篇: What is the difference between JVM, JDK, JRE & OpenJDK?
下一篇: Should I use a StringBuilder or a StringBuffer in Spark?