根据 Oracle 官方的说法(Oracle JDK Releases for Java 11 and Later)

在 Java 11 之后,OracleJDK 和 OpenJDK 的功能基本一致,之前 OracleJDK 中的私有组件大多数也已经被捐赠给开源组织,现在它们之间只有少量的区别。

要比哪个更稳定,OpenJDK 实际上不适合拿来和 OracleJDK 进行对比

OpenJDK 不提供 LTS 服务,而 OracleJDK 每三年都会推出一个 LTS 版进行长期支持。

和 OracleJDK 对比的应该是 AdoptOpenJDK、Zulu、Red Hat OpenJDK 以及 Liberica JDK,它们都是基于 OpenJDK 的发行版,

由不同的商业公司提供商业支持,包括和 OracleJDK 周期相同的 LTS 版。

与这些 OpenJDK 的发行版相比,OracleJDK 并没有本质差异,稳定性也是智者见智仁者见仁的,差异并不大。

相比之下,现在更推荐选择一个 OpenJDK 的发行版使用,而不是选择 OracleJDK:

OracleJDK 和这些 OpenJDK 发行版功能基本一致,背后同样有公司提供商业支持,稳定性也难分优劣,Red Hat OpenJDK、Zulu 和 Liberica JDK 都通过了 TCK

OracleJDK 修改了协议,除了 开发、测试以及演示用途,其他场合都是要收费的(参见我的这个答案),

而 Zulu、AdoptOpenJDK 和 Liberica JDK 都提供适用于各种用途的免费版本,并提供 LTS 服务,只有在需要商业支持的时候需要付费

OracleJDK 对一般用户友善程度也不是最高的,新版不再捆绑 JavaFX,同时不提供 32 位构建

现在我最推荐开发者和一般用户使用的是 Liberica JDK

它提供了捆绑 JavaFX 的 full 版,支持 macOS x86_64、Windows x86、Windows x86_64、

Linux x86、Linux x86_64、Alpine Linux x86_64、Linux ARMv8、Linux ARMv7 HardFloat、

Linux PPC64 LE 等平台,对于需要 32 位环境或者需要在小众平台上工作的用户来说很友好。同时它的 exe 安装包能够方便的配置环境变量,

还提供 YUM 和 APT 仓库,提供 Docker 镜像,目前来说应该是对一般用户最友好的 OpenJDK 发行版。

两者主要区别:

  1. 授权协议不同:OpenJDK采用GPL V2协议放出,而SUN JDK则采用JRL放出。

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

  1. 功能结构不同:OpenJDK源代码不完整,这个很容易想到,在采用GPL协议的OpenJDK中,SUN JDK的一部分源代码因为产权的问题无法开放给OpenJDK使用,

其中最主要的部份就是JMX中的可选元件SNMP部份的代码。因此这些不能开放的源代码 将它作成plug,以供OpenJDK编译时使用,你也可以选择不要使用plug。而Icedtea则为这些不完整的部分开发了相同功能的源代码 (OpenJDK6),促使OpenJDK更加完整。

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

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

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

  1. 商标权:这个很容易理解,在安装OpenJDK的机器上,输入“java -version”显示的是OpenJDK,但是如果是使用Icedtea补丁的OpenJDK,显示的是java。