欢迎大家来到IT世界,在知识的湖畔探索吧!
先说总结:
JVM(Java虚拟机) = Java虚拟机
JRE(Java运行环境) = JVM + 运行时的类库
JDK(Java开发工具包) = JER + 开发工具包
- JVM
Java 虚拟机(JVM)是运行Java字节码的虚拟机。JVM有针对不同系统的特定实现(Windows,Linux,macOS),目的是使用相同的字节码,它们都会给出相同的结果。
1.1. 什么是字节码?采用字节码的好处是什么?
在Java中,JVM可以理解的代码就叫做字节码(即扩展名为,class的文件),它不面向任何特定的处理器,只面向虚拟机。Java 语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。所以Java程序运行时比较高效,而且,由于字节码并不针对一种特定的机器,因此,Java程序无须重新编译便可在多种不同操作系统的计算机上运行,即一次编译,随处可以运行。
Java程序从源代码到运行一般有下面3步:
参考下图:
我们需要格外注意的是.class—>机器码这一步。在这一步JVM类加载器首先加载字节码文件,然后通过解释器逐行解释执行,这种方式的执行速度会相对比较慢。而且,有些方法和代码块是经常需要被调用的(也就是所谓的热点代码),所以后面引进了JIT编译器,而JIT属于运行时编译。当JIT编译器完成第一次编译后,其会将字节码对应的机器码保存下来,下次可以直接使用。而我们知道,机器码的运行效率肯定是高于Java解释器的。这也解释了我们为什么经常会说Java是编译与解释共存的语言。
- JRE
JRE是Java 运行时环境。它是运行已编译Java程序所需的所有内容的集合,包括Java虚拟机(JVM),Java类库,java命令和其他的一些基础构件。但是,它不能用于创建新程序。
- JDK
JDK是Java Development Kit,它是功能齐全的Java SDK。它拥有JRE所拥有的一 切,还有编译器(javac)和工具(如javadoc和jdb)。它能够创建和编译程序。
如果你只是为了运行一下Java程序的话,那么你只需要安装JRE就可以了。如果你需要进行一些Java编程方面的工作,那么你就需要安装JDK了。但是,这不是绝对的。有时,即使您不打算在计算机上进行任何Java开发,仍然需要安装JDK。例如,如果要使用JSP部署Web应用程序,那么从技术上讲,您只是在应用程序服务器中运行Java程序。那你为什么需要JDK呢?因为应用程序服务器会将JSP转换为Java servlet,并且需要使用JDK来编译servlet。
3.1 OpenJDK 和 Oracle JDK有什么区别?
关于JVM, JDK,JRE和OpenJDK之间的区别,Oracle博客帖子在2012年有一个更详细的答案:
答:非常接近—我们的Oracle JDK版本构建过程基于OpenJDK7构建,只添加了几个部分,例如部署代码,其中包括Oracle的Java 插件和Java WebStart的实现,以 及一些封闭的源代码派对组件,如图形光栅化器,一些开源的第三方组件,如Rhino,以及一些零碎的东西,如附加文档或第三方字体。展望未来,我们的目的是开源Oracle JDK的所有部分,除了我们考虑商业功能的部分。
总结:
1.Oracle JDK大概每6个月发一次主要版本,而OpenJDK版本大概每三个月发布一次。但这不是固定的,我觉得了解这个没啥用处;
2.OpenJDK是一个参考模型并且是完全开源的,而Oracle JDK是OpenJDK的一个实现,并不是完全开源的;
3.Oracle JDK 比OpenJDK更稳定。OpenJDK和Oracle JDK的代码几乎相同,但 Oracle JDK有更多的类和一些错误修复。因此,如果您想开发企业/商业软件,我建议您选择Oracle JDK,因为它经过了彻底的测试和稳定。某些情况下,有些人提到在使用OpenJDK可能会遇到了许多应用程序崩溃的问题,但是只需切换到Oracle JDK就可以解决问题;
4.在响应性和JVM性能方面,Oracle JDK与OpenJDK相比提供了更好的性能;
5.Oracle JDK不会为即将发布的版本提供长期支持,用户每次都必须通过更新到最新版本获得支持来获取最新版本;
6.Oracle JDK 根据二进制代码许可协议获得许可,而OpenJDK根据GPLv2许可获得许可。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/30078.html