Oracle JDK和 OpenJDK 之間的區別
1.簡介
在本文中,我們將探討Oracle Java Development Kit和OpenJDK之間的差異。我們先快速瀏覽一下,然后進行比較。之后,我們將看到其他JDK實現的列表。
2. Oracle JDK和Java SE歷史
JDK(Java Development Kit)是Java平台編程中使用的軟件開發環境。它包含一個完整的Java運行時環境,即所謂的私有運行時。該名稱來自於它包含的工具多於獨立的JRE以及開發Java應用程序所需的其他組件。
Oracle強烈建議使用術語JDK來引用Java SE(標准版)開發工具包(還有Enterprise Edition和Micro Edition平台)。
我們來看看Java SE的歷史:
- JDK Beta - 1995
- JDK 1.0 - 1996年1月
- JDK 1.1 - 1997年2月
- J2SE 1.2 - 1998年12月
- J2SE 1.3 - 2000年5月
- J2SE 1.4 - 2002年2月
- J2SE 5.0 - 2004年9月
- Java SE 6 - 2006年12月
- Java SE 7 - 2011年7月
- Java SE 8(LTS) - 2014年3月
- Java SE 9 - 2017年9月
- Java SE 10(18。3) - 2018年3月
- Java SE 11(18.9 LTS) - 2018年9月
- Java SE 12(19。3) - 2019年3月
注意:不再支持斜體版本。
我們可以看到Java SE的主要版本大約每兩年發布一次,直到Java SE 7.從Java SE 6開始花了五年時間,之后又花了三年時間升級到Java SE 8。
自Java SE 10以來,我們可以期待每六個月發布一次新版本。但是,並非所有版本都是長期支持(LTS)版本。由於Oracle的發布計划,LTS產品發布僅每三年發布一次。
Java SE 11是最新的LTS版本,Java SE 8將在2020年12月之前獲得免費的公共更新,用於非商業用途。
在2010年Oracle收購Sun Microsystems之后,這個開發工具包得到了它的當前名稱。在此之前,它的名字是SUN JDK,它是Java編程語言的官方實現。
3. OpenJDK
OpenJDK是Java SE 平台版本的免費開源實現。它最初於2007年發布,是Sun Microsystems於2006年開始開發的結果。
當然,我們應該強調 OpenJDK是自SE 7版以來Java標准版的官方參考實現。
最初,它僅基於JDK 7.但是,從Java 10開始,Java SE平台的開源參考實現是JDK項目的責任。而且,就像Oracle一樣,JDK項目也將每六個月發布一次新功能。
我們應該注意到,在這個長期運行的項目之前,JDK Release Projects發布了一個功能,然后停止了。
現在讓我們看看OpenJDK版本:
- OpenJDK 6項目 - 基於JDK 7,但經過修改后提供了Java 6的開源版本
- OpenJDK 7項目 - 2011年7月28日
- OpenJDK 7u項目 - 該項目開發Java Development Kit 7的更新
- OpenJDK 8項目 - 2014年3月18日
- OpenJDK 8u項目 - 該項目開發Java Development Kit 8的更新
- OpenJDK 9項目 - 2017年9月21日
- JDK10項目於2018年3月10日至20日發布
- JDK11項目於2018年9月11日至25日發布
- JDK12項目發布 - 穩定階段
4. Oracle JDK與OpenJDK
在本節中,我們將重點介紹Oracle JDK和OpenJDK之間的主要區別。
4.1. 發布時間表
正如我們所提到的,Oracle將每三年發布一次,而OpenJDK將每六個月發布一次。
Oracle為其版本提供長期支持。另一方面,OpenJDK僅支持對發布的更改,直到下一個版本發布。
4.2. 許可證
Oracle JDK根據Oracle二進制代碼許可協議獲得許可,而OpenJDK具有GNU通用公共許可證(GNU GPL)版本2,使用了一個修正版本。
使用Oracle平台時會產生一些許可影響。如Oracle 宣布的那樣,在沒有商業許可的情況下,在2019年1月之后發布的Oracle Java SE 8的公開更新將無法用於商業,商業或生產用途。但是,OpenJDK是完全開源的,可以自由使用。
4.3. 性能
有兩者之間沒有真正的技術差別,因為針對Oracle JDK構建過程是基於OpenJDK的的。
在性能方面,Oracle在響應能力和JVM性能方面要好得多。由於其對企業客戶的重要性,它更加關注穩定性。
相比之下,OpenJDK將更頻繁地發布版本。結果,我們可能遇到不穩定的問題。根據社區反饋,我們知道一些OpenJDK用戶遇到了性能問題。
4.4. 功能
如果我們比較功能和選項,我們將看到 Oracle產品具有Flight Recorder,Java Mission Control和Application Class-Data Sharing 功能,而OpenJDK具有Font Renderer功能。
此外,Oracle有更多的垃圾收集選項和更好的渲染器,我們可以在另一個比較中看到。
4.5. 發展與人氣
Oracle JDK由Oracle Corporation完全開發,而OpenJDK由Oracle,OpenJDK和Java Community開發。然而,紅帽,Azul Systems,IBM,Apple Inc.,SAP AG等頂級公司也積極參與其開發。
正如我們從前一小節的鏈接中看到的那樣,當涉及到在其工具中使用Java開發工具包的頂級公司(例如Android Studio或IntelliJ IDEA)的流行時,Oracle JDK是更*受歡迎的*。
另一方面,主要的Linux發行版(Fedora,Ubuntu,Red Hat Enterprise Linux)提供OpenJDK作為默認的Java SE實現。
5.自Java 11以來的變化
正如我們在Oracle博客文章中看到的那樣 ,從Java 11開始有一些重要的變化。
首先,Oracle將使用Oracle JDK作為Oracle產品的一部分,將開源**GNU通用公共許可證v2與Classpath Exception(GPLv2 + CPE)*和商業許可證結合使用,或者更改其歷史“ BCL ”許可證,* 或者服務,或不歡迎開源軟件。
每個許可證都有不同的版本,但這些版本在功能上只與一些裝飾和包裝差異相同。
此外,OpenJDK現在提供傳統的“商業功能”,如Flight Recorder,Java Mission Control和Application Class-Data Sharing,以及Z Garbage Collector。因此,Oracle JDK和OpenJDK構建從Java 11開始基本相同。
讓我們看看主要的區別:
- 使用-XX:+ UnlockCommercialFeatures選項時,Oracle的Java 11工具包會發出警告,而在OpenJDK版本中,此選項會導致錯誤
- Oracle JDK提供了一種配置,可將使用日志數據提供給“高級管理控制台”工具
- Oracle一直要求第三方加密提供程序由已知證書簽名,而OpenJDK中的加密框架具有開放加密接口,這意味着可以使用哪些提供程序沒有限制
- Oracle JDK 11將繼續包括安裝程序,品牌和JRE打包,而OpenJDK構建目前可用作zip和tar.gz文件
- 該javac的-釋放命令行為有所不同了Java 9和Java 10個目標由於一些額外的模塊在Oracle的版本存在
- java -version和java -fullversion命令的輸出將Oracle的構建與OpenJDK構建區分開來
6.其他JDK實現
現在讓我們快速瀏覽一下其他活動的Java Development Kit實現。
6.1. 自由開源
按字母順序列出的以下實現是開源的,可以免費使用:
- Amazon Corretto
- Azul Zulu
- Bck2Brwsr
- CACAO
- Codename One
- DoppioJVM
- Eclipse OpenJ9
- GraalVM CE
- HaikuVM
- HotSpot
- Jamiga
- JamVM
- Jelatine JVM
- Jikes RVM (Jikes Research Virtual Machine)
- JVM.go
- leJOS
- Maxine
- Multi-OS Engine
- RopeVM
- uJVM
6.2. 專有實現
還有受版權保護的實施:
- Azul Zing JVM
- CEE-J
- Excelsior JET
- GraalVM EE
- Imsys AB
- JamaicaVM(aicas)
- JBlend(Aplix)
- MicroJvm(IS2T - 工業智能軟件技術)
- OJVM
- PTC Perc
- SAP JVM
- Waratek CloudVM for Java
與上面列出的有效實現一起,我們可以看到非有效實現的列表 以及每個實現的簡短描述。
7.結論
在本文中,我們專注於當今最流行的兩個Java開發工具包。
我們首先描述了它們中的每一個,然后強調了它們之間最顯着的差異。然后,我們特別關注自Java 11以來的變化和差異。最后,我們列出了今天可用的其他有效實現。
8.備注
翻譯自: