日有消息顯示,阿里將於 21 日重磅發布其 OpenJDK 發行版 Alibaba Dragonwell。
我們知道 OpenJDK 是基於 GPL v2/Classpath Exception 的 JDK 開源版本,有許多公司都在 OpenJDK 的基礎上提供了自己的發行版,比如 Oracle、AdoptOpenJDK、Azul、IBM 與 Red Hat,一般這些供應商會將自行衍生的 OpenJDK 版本加入一些商業/非商業支持選項。
去年 AWS 也推出了自己的 OpenJDK 發行版 Corretto,背后甚至有 Java 之父 James Gosling “站台”,一時間引起不小反響。
常規理解,AWS 搞 Corretto 也算是一種“造輪子”,但是它提供的長期支持包括安全修復、常用功能增強、GC 調度、防止內存溢出,以及改進的監控、報表和線程管理等,這樣的能力再加上 AWS 強大的客戶和社區生態依賴,有理由讓人相信 Corretto 這輪子是具有較大實際意義的。
阿里此次將發布的 Alibaba Dragonwell 也聲稱 LTS,並且阿里的客戶與開發社區體量自然也無庸贅述,那么同為“造輪子”,Alibaba Dragonwell 這個 OpenJDK 發行版會帶來些什么呢?
阿里雲智能資深技術專家李三紅向開源中國提前透露了 Alibaba Dragonwell 的一些信息。
第一印象是 Dragonwell 這個名字,龍井茶?是寓意像龍井一樣的品質嗎?分享一下背后的想法吧。
Java 本身就是一種咖啡的名字,AWS 開源的 Corretto 也是一種咖啡名。
在取名字的時候,我們也考慮了很多。中國的 Java 開發者將是 Alibaba Dragonwell 重要的用戶群體,所以我們想從一些有中國特色的飲品名中尋找靈感,既能代表中國的文化,同時也希望這個名字中能有非常宏大的意願,能夠詮釋她包容一切。最終想到了杭州的綠茶——龍井。
另一方面,龍井的英文名字 Dragonwell 也正好符合我們想要表達的意思。其中的“well”這個單詞,就有着將很多水源匯聚在一起,一同享用的寓意,正好貼合開源協作分享的精神理念。這也是阿里開源 JDK 的初衷,希望將許多開發者的貢獻匯聚在一起,讓大家能夠一起免費使用 Java,一起推動 Java 的進步。
為什么要去做這個東西?請介紹一下相關背景。
大家都知道 Java 一直是由 Oracle 主導的,從 2017 年開始,Oracle 開始陸陸續續轉變了一些 Java 的策略。在 2018 年 CodeOne(原 JavaOne)大會上,來自 Java Platform Group 的首席架構師 Mark Reinhold 作了“The Future of Java is Today”的主題演講,重點闡述了 Java 發布模式的變化。
他指出,從 Java 11(包含)以及以后的版本開始,Oracle 將不再提供免費的長期支持,如果你需要長期支持,可以通過向 Oracle 付費的方式獲得。而 Java 8 的免費更新也將會在 2019 年一月份停止(目前已經停止)。
所以除非你是 Oracle 或者其它提供商業 JDK 廠商的付費客戶,否則唯一的選擇就是社區維護的 OpenJDK 版本,可以預見 Java 開發者從 Oracle JDK 切換到開源 OpenJDK 的現象會越來越多。
阿里可以說是全球最大的 Java 用戶之一,而 JDK 又是 Java 的一個基礎設施。我們其實早從 2010 年開始,就已經基於 OpenJDK 開源軟件進行開發與定制。9 年來,支撐了阿里經濟體內所有的 Java 業務,歷經多年的“雙11”考驗,積累了大量業務場景下的實踐經驗。
阿里作為一家這么大體量的 Java 用戶,我們有一份責任,就是把我們的 JDK 開放出去,給所有 Java 用戶一個新的選擇。同時,對於阿里自身來說,Alibaba Dragonwell 會針對 LTS 的兩個版本 Java 8 和 Java 11 隨阿里雲 VM 鏡像發布,免費提供給阿里雲客戶使用。
也就是說 Alibaba Dragonwell 會基於 OpenJDK 8 和 11?那么以后會更注重 Java 新特性的跟進還是保證提供支持呢?對它今后的發展有什么設想或者目標?
此次發布的 Alibaba Dragonwell 8 預覽版本對應於上游的 OpenJDK 8 的版本。Alibaba Dragonwell 作為 OpenJDK 下游,是一款免費的 JDK 發行版,它將提供長期支持,包括關鍵修復和安全更新。
Alibaba Dragonwell 支持 x86-64/Linux 平台,它的特點,或者說所注重的是:在數據中心 Java 應用大規模部署的情況下,穩定性、效率以及性能的優化與提高。
Alibaba Dragonwell 的前身是阿里巴巴內部使用的 AJDK,或者換個角度來看,Alibaba Dragonwell 是 AJDK 優勢的繼承者。作為 AJDK 的開源版本,Alibaba Dragonwell 將沿襲 AJDK 的技術優勢以及實踐場景累積下來的技術經驗。
AJDK 有眾多的技術創新,包括多租戶、Wisp 協程技術與 ZenGC 等,我們希望逐步把阿里巴巴內部積累的技術創新開源出來貢獻給 OpenJDK 社區,並在 Alibaba Dragonwell 中沉淀下來。
什么時候 GA,目前有沒有各個階段具體的發布時間表?
目前發布的版本是 Alibaba Dragonwell 8 Preview 預覽版,Alibaba Dragonwell 將每季度發布一個更新,目前計划是 Preview 的三個月后發布 GA。Alibaba Dragonwell 11 預計年底發布。
Alibaba Dragonwell 8 是一個 LTS 版本,它的生命周期具體是怎樣的?最近大家對開源協議相關的問題都怕了(也就是開源協議其實可以根據廠商需要作變更),那目前/將來 Dragonwell 會不會加入一些支持限制條款呢?
不會。Alibaba Dragonwell 是 OpenJDK 下游,我們會嚴格遵循 OpenJDK 社區相關原則及協議。
前陣子 AWS 也推出了自己的 OpenJDK 發行版 Corretto;再往前,其實 Azul 與 Red Hat 等廠商也有提供 OpenJDK 版本。那么阿里的 Dragonwell 有什么優勢、特點呢?
前面也提到了,Alibaba Dragonwell 注重的是在數據中心 Java 應用大規模部署的情況下,穩定性、效率以及性能的優化與提高。
具體來說:
緊密與 OpenJDK 社區保持合作,保持對社區工作的跟蹤,及時同步上游更新。
Alibaba Dragonwell 發行版與 Java SE 標准兼容。
AJDK 上孵化的創新技術,會逐步貢獻 OpenJDK,並在 Alibaba Dragonwell 沉淀。比如這次發布的版本中包含了 JWarmUp 功能,它優化了 JVM 重啟后的預熱過程,具體技術細節可以參考用戶手冊。
基於阿里工程實踐,Alibaba Dragonwell 會選擇移植高版本 Java 的重要功能,這些移植功能已經在阿里內部被大規模部署,用戶都可以免費使用,而不用等下一個 LTS 版本。比如這次版本移植了上游 Java 11 的 Java Flight Recorder(JFR) 功能,Java 開發人員可以通過 JFR 收集 JVM 運行過程中的詳細的 profiling 信息,配合 Java Mission Control(JMC),大幅提高 Java 應用的問題診斷及性能優化效率。這對於仍然停留在 Java 8 的用戶來說,還是非常有意義的。
嘉賓介紹
李三紅,阿里雲智能資深技術專家。2014 年加入螞蟻金服,現為阿里巴巴 Java 技術負責人,有超過 10 年的 Java 開發經驗。加入阿里前,曾任 IBM Java 技術中心相關負責人,參與 IBM Java 虛擬機 J9 的開發。活躍於 Java 技術社區,在 Java 虛擬機領域擁有多項技術專利,是 GreenTea JUG(Java User Group) 組織者,JVM 頂級會議 JVMLS'17 受邀演講嘉賓,JavaOne、QCon、JPoint 等國際會議受邀嘉賓,VMIL'18 會議程序委員會委員。
一、簡介:
3月21日北京阿里雲峰會,阿里巴巴正式宣布對外開源OpenJDK長期支持版本Alibaba Dragonwell。作為Java全球管理組織Java Community Process(JCP)的最高執行委員會的唯一中國代表,以及Oracle之外的Java生態中為數不多的OpenJDK定制者,Alibaba Dragonwell的開源是阿里巴巴向全球Java開發者的重磅獻禮。
阿里巴巴有着最豐富的Java應用場景,覆蓋電商、金融、物流等眾多領域,是世界上最大的Java用戶之一。作為OpenJDK的下游,Alibaba Dragonwell是阿里巴巴內部OpenJDK定制版AJDK的開源版本,AJDK為在線電商、金融、物流做了結合業務場景的優化,運行在超大規模的、100000+服務器的阿里巴巴數據中心。Alibaba Dragonwell與Java SE標准兼容,目前僅支持Linux/x86_64平台。Alibaba Dragonwell是OpenJDK的下游(friendly fork),使用了和OpenJDK一樣的licensing。阿里會更緊密地和OpenJDK等開源社區協作,貢獻更多的patches,促進Java技術的持續發展。
二、特性:
1、垃圾回收:使用CMS (-XX:+UseConcMarkSweep) 作為默認GC策略。
2、JFR(Java Flight Recorder):
(1)從JDK11中backport到了Dragonwell-8版本中。
(2)添加了EnbleJFR命令行選項,默認關閉,用於徹底隔離JFR相關邏輯,只有添加-XX:+EnableJFR到JVM命令行才可以使用JFR特性。
3、Serviceability支持:
(1)jmap的dump子命令支持“mini”選項,可以在做heapdump時忽略掉原始類型數組的內容,詳情請參考jmap工具的幫助信息。
(2)增加參數PrintYoungGenHistoAfterParNewGC用於打印一次ParNew GC之后young區對象的histogram。該參數可以用jinfo動態打開。
(3)增加參數PrintGCRootsTraceTime用於打印一次ParNew GC的具體耗時,主要用於排查長的ygc問題。該參數可以用jinfo動態打開關閉。
(4)增加了參數ArrayAllocationWarningSize,默認值為512M。當分配的對象大小超過該值的時候,標准輸出里會顯示分配的堆棧。該參數可以通過jinfo動態修改。
4、JWarmUp:
(1)增加參數CompilationWarmUpRecording啟用JWarmUp的記錄模式,在指定的時間后,JVM會生成JWarmUp profile,包含JVM中的已加載類及熱點方法。
(2)增加參數CompilationWarmUp啟用JWarmUp的預熱編譯模式,根據指定的JWarmUp profile加載之前記錄的熱點方法,通過API可以通知JVM預熱編譯熱點方法。
(3)JDK中提供com.alibaba.jwarmup.JWarmUp類,應用可以使用該JAVA API控制JWarmUp,例如通知JVM開始WarmUp編譯,檢查編譯情況,通知JVM退優化預熱編譯的方法。
三、安裝Alibaba Dragonwell:
1、下載軟件包:
下載地址:https://github.com/alibaba/dragonwell8/releases
下載版本:Alibaba_Dragonwell8_Linux_x64_8.0-preview.tar.gz
2、解壓軟件包:# tar -xf Alibaba_Dragonwell8_Linux_x64_8.0-preview.tar.gz -C /usr/local
備注:解壓后生成的目錄名為j2sdk-image
3、配置環境變量:
# vim /etc/profile.d/jdk.sh
export JAVA_HOME=/usr/local/j2sdk-image
export PATH=$JAVA_HOME/bin:$PATH
# . /etc/profile.d/jdk.sh
4、查看JAVA版本:# java -version