000-Java JDK JRE OpenJDK 的区别

1、JRE和JDK 的区别

  • JVM(Java Virtual Machine),Java虚拟机。

  • JRE(Java Runtime Environment),Java运行环境,包含了JVM和Java的核心类库(Java API)。

  • JDK(Java Development Kit),Java开发工具,包含了JRE和开发工具。

总结:我们只需安装JDK即可,它包含了java的运行环境和虚拟机。

2、JDK与Java SE/EE/ME的区别

2.1、Java SE(Java Platform,Standard Edition)。

Java SE 以前称为 J2SE。它允许开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的 Java 应用程序。Java SE 包含了支持 Java Web 服务开发的类,并为 Java Platform,Enterprise Edition(Java EE)提供基础。

Java SE 是做电脑上运行的软件。

2.2、Java EE(Java Platform,Enterprise Edition)。

这个版本以前称为 J2EE。企业版本帮助开发和部署可移植、健壮、可伸缩且安全的服务器端 Java 应用程序。Java EE 是在 Java SE 的基础上构建的,它提供 Web 服务、组件模型、管理和通信 API,可以用来实现企业级的面向服务体系结构(service-oriented architecture,SOA)和 Web 2.0 应用程序。

Java EE 是用来做网站的(我们常见的JSP技术)。

2.3、Java ME(Java Platform,Micro Edition)。

这个版本以前称为 J2ME。Java ME 为在移动设备和嵌入式设备(比如手机、PDA、电视机顶盒和打印机)上运行的应用程序提供一个健壮且灵活的环境。Java ME 包括灵活的用户界面、健壮的安全模型、许多内置的网络协议以及对可以动态下载的连网和离线应用程序的丰富支持。基于 Java ME 规范的应用程序只需编写一次,就可以用于许多设备,而且可以利用每个设备的本机功能。

Java ME 是做手机软件的。

2.4、JDK与Java SE/EE/ME的区别

在一台电脑上可以同时安装Java SE、Java EE、Java ME,不影响,对应开发需求不一样,用对应的版本。

JDK是不区分se、ee、me的,所以你在oracle的官网上只要下载java se对应的版本jdk即可:

实际上我们开发web时,就应该选择ee的,而J2EE你只需要两个包 jsp-api.jar 和 servlet-api.jar,而这两个包是没有官方版本的。 也就是Java没有提供这两个包,只提供了一个规范。那么这两个包是谁提供的? 是Web容器,也就是Tomcat、Jetty、JBoss之类的服务器提供的。

有时会有这样的一个说法,选择jdk1.x的版本还是jdk8的版本这样的,jdk1.x的说法是很多年前遗留下来的说法,而现在我们统称的叫法是jdk8这样子。

然后我们会发现安装jdk8时,会在系统盘上创建一个目录,而目录的命名为jdk_1.8xxx这样的,还是上面那句,历史遗留问题。

3、OpenJDK和JDK区别

今天在CentOS7中安装JDK的时候,在网上看了一些教程,教程里面都说要先删除CentOS自带了OpenJDK,我就很好奇,为什么一定要删除呢?究竟什么是OpenJDK?有什么作用呢?和正式的JDK有什么不同呢?

历史上的原因是,openjdk是jdk的开放原始码版本,以GPL协议的形式放出。在JDK7的时候,openjdk已经成为jdk7的主干开发,sun jdk7是在openjdk7的基础上发布的,其大部分原始码都相同,只有少部分原始码被替换掉。使用JRL(JavaResearch License,Java研究授权协议)发布。

至于openjdk6则更是有其复杂的一面,首先是openjdk6是jdk7的一个分支,并且尽量去除Java SE7的新特性,使其尽量的符合Java6的标准。

关于JDK和OpenJDK的区别,可以归纳为以下几点:

  • 授权协议的不同

    openjdk采用GPL V2协议放出,而JDK则采用JRL放出。两者协议虽然都是开放源代码的,但是在使用上的不同在于GPL V2允许在商业上使用,而JRL只允许个人研究使用。

  • OpenJDK不包含Deployment(部署)功能

    部署的功能包括:Browser Plugin、Java Web Start、以及Java控制面板,这些功能在Openjdk中是找不到的。

  • OpenJDK源代码不完整

    这个很容易想到,在采用GPL协议的Openjdk中,sun jdk的一部分源代码因为产权的问题无法开放openjdk使用,其中最主要的部份就是JMX中的可选元件SNMP部份的代码。因此这些不能开放的源代码将它作成plug,以供OpenJDK编译时使用,你也可以选择不要使用plug。而Icedtea则为这些不完整的部分开发了相同功能的源代码(OpenJDK6),促使OpenJDK更加完整。

  • 部分源代码用开源代码替换

    由于产权的问题,很多产权不是SUN的源代码被替换成一些功能相同的开源代码,比如说字体栅格化引擎,使用Free Type代替。

  • openjdk只包含最精简的JDK

    OpenJDK不包含其他的软件包,比如Rhino Java DB JAXP……,并且可以分离的软件包也都是尽量的分离,但是这大多数都是自由软件,你可以自己下载加入。

  • 不能使用Java商标

    这个很容易理解,在安装openjdk的机器上,输入“java -version”显示的是openjdk,但是如果是使用Icedtea补丁的openjdk,显示的是java。(未验证)


000-Java JDK JRE OpenJDK 的区别
https://flepeng.github.io/021-Java-01-course-000-Java-JDK-JRE-OpenJDK-的区别/
作者
Lepeng
发布于
2020年2月2日
许可协议