一、Java11時代
Java 的版本發布周期變更為每六個月一次 , 每半年發布一個大版本,每個季度發布一個中間特性版本,Java 9 和 Java 10 這兩個被稱為“功能性的版本”,兩者均只提供半年的技術支持,Java 11 不僅提供了長期支持服務,還將作為 Java 平台的參考實現。Oracle 直到2023年9月都會為 Java 11 提供技術支持,而補丁和安全警告等擴展支持將持續到2026年。所以,Java11 必將是下一代長期使用的版本。
二、Open JDK
在Java歷史上,openjdk是jdk的開放原始碼版本,以GPL協議的形式放出。在JDK7的時候,openjdk已經成為jdk7的主干開發,sun jdk7是在openjdk7的基礎上發布的,其大部分原始碼都相同,只有少部分原始碼被替換掉。使用JRL(JavaResearch License,Java研究授權協議)發布。
三、Java11時代,Oracle JDK與Open JDK
1、授權協議的不同: openjdk采用GPL V2協議放出,而JDK則采用JRL放出。兩者協議雖然都是開放源代碼的,但是在使用上的不同在於GPL V2允許在商業上使用,而JRL只允許個人研究使用。 Oracle JDK源代碼包括“ORACLE PROPRIETARY / CONFIDENTIAL。使用受許可條款約束。
2、OpenJDK不包含Deployment(部署)功能: 部署的功能包括:Browser Plugin、Java Web Start、以及Java控制面板,這些功能在Openjdk中是找不到的。
3、openjdk只包含最精簡的JDK:Oracle JDK提供“JDK”和“JRE”, OpenJDK僅提供 ”JDK“。Oracle JDK提供“安裝程序”(msi,rpm,deb等),將JDK二進制文件放在系統中,還包含更新規則,在某些情況下還處理一些常見配置,如設置公共環境變量(例如,JAVA_HOME in Windows)並建立文件關聯(例如,使用java來啟動.jar文件)。 OpenJDK僅作為壓縮存檔(tar.gz或.zip)提供。 OpenJDK不包含其他的軟件包,比如Rhino Java DB JAXP……,並且可以分離的軟件包也都是盡量的分離,但是這大多數都是自由軟件,你可以自己下載加入。
4、OpenJDK源代碼不完整:Oracle JDK二進制文件包括未添加到OpenJDK二進制文件的API,如javafx,資源管理和(JDK 11之前的更改)JFR API。在采用GPL協議的Openjdk中,sun jdk的一部分源代碼因為產權的問題無法開放openjdk使用,其中最主要的部份就是JMX中的可選元件SNMP部份的代碼。因此這些不能開放的源代碼將它作成plug,以供OpenJDK編譯時使用,你也可以選擇不要使用plug。而Icedtea則為這些不完整的部分開發了相同功能的源代碼(OpenJDK6),促使OpenJDK更加完整。
5、部分源代碼用開源代碼替換: 由於產權的問題,很多產權不是SUN的源代碼被替換成一些功能相同的開源代碼,比如說字體柵格化引擎,使用Free Type代替。
6、OpenJDK不支持啟動參數:如果使用-XX:+ UnlockCommercialFeatures標志,OpenJDK將(繼續)拋出錯誤並停止。 Oracle JDK不再需要該標志,並將打印警告,但如果使用則繼續執行。
7、不能使用Java商標:Oracle JDK有Java杯和蒸汽圖標,OpenJDK有Duke圖標。java -version的輸出會有所不同。 Oracle JDK包含LTS。 OpenJDK(由Oracle生成)不包括Oracle特定的LTS標識符。