唱衰 Java 的聲音由(you)來已久。
尤其(qi)是近幾年,云原生時(shi)代的到來,軟件(jian)的交付方式(shi)發生了(le)(le)根本性變化,Java 遭受了(le)(le)諸多(duo)質疑。
傳統(tong)領域的 Java 開發,交(jiao)付(fu)的是 Java 應用本身(shen),具體(ti)體(ti)現在(zai)(zai)以 “jar”“war” 的形式交(jiao)付(fu),而云(yun)原(yuan)生(sheng)最佳(jia)實踐(jian),則是基(ji)于微服務形式,以容器為基(ji)本交(jiao)付(fu)單位(wei),并在(zai)(zai) K8S 中編(bian)排(pai)。云(yun)原(yuan)生(sheng)應用要求更快速(su)地啟動、強調資(zi)源按量消費,彈性(xing)擴展,以及可(ke)觀(guan)測(ce)性(xing)等。就這一層面而言,在(zai)(zai)云(yun)原(yuan)生(sheng)時代(dai),Java 的缺(que)陷(xian)確實是天然(ran)存在(zai)(zai)的。
“事實(shi)上,Java 技術(shu)在云原生時(shi)代也在不(bu)停地進化(hua)。” 面對唱衰 Java 的(de)諸多論調,龍(long)蜥社區 Java 語言和(he)虛擬機 SIG 成(cheng)員、龍(long)蜥社區 RISC-V SIG 成(cheng)員、阿里云程(cheng)序(xu)語言與編(bian)譯器團隊負責人(ren)、Java Champion 李(li)三紅選擇理性看待。
“比如更多支持容器部署的(de)(de)(de)特性(xing)已經加入到(dao) OpenJDK 版本(ben)。一直被人詬病的(de)(de)(de) Java 啟動慢的(de)(de)(de)問題,目前基于 OpenJDK 技術(shu)的(de)(de)(de)幾個創新項(xiang)目正在多個不(bu)同方(fang)向探索,包(bao)括 CRaC (Coordinated Restore at Checkpoint) 、Leyden,以及由阿里和 Google 作為主要(yao)貢獻者(zhe)的(de)(de)(de) Fast Startup Incubator 等(deng)項(xiang)目。在資(zi)源(yuan)彈(dan)性(xing)使用方(fang)面,由 Alibaba Dragonwell 提供的(de)(de)(de) ElasticHeap 功能,主要(yao)目的(de)(de)(de)是解決云計算環境下 Java 內存(cun)資(zi)源(yuan)使用的(de)(de)(de)彈(dan)性(xing)問題。最后,OpenJDK 的(de)(de)(de) JFR 以及 JFR Streaming 技術(shu)為構建 Java 云原生可觀(guan)測(ce)工具提供了重要(yao)的(de)(de)(de)技術(shu)支撐(cheng)。”
Java 面(mian)臨的挑(tiao)戰,不僅僅是(shi)云(yun)原生(sheng)。
李三紅認(ren)為,從 1995 年 Java 1.0 發(fa)布算起, Java 技術這二十多年的發(fa)展,大致存在一明一暗兩條線的驅(qu)動(dong)。“一條暗(an)線,是指 Java 或(huo)者說支撐 Java 的底層(ceng) JVM 技術(shu)適(shi)配計算機架(jia)構的演(yan)進(jin)與發展。一條(tiao)明線,是指 Java 作為一個開(kai)發者(zhe)工具(ju),本質是要面向業務(wu)領(ling)域(yu)解決(jue)業務(wu)問題的,所(suo)以自然而然地推動(dong)了 Java 在云原生,AI 等(deng)方向的演(yan)進,解決(jue)這些(xie)領(ling)域(yu)內碰到的問題與挑戰(zhan)。”
后摩爾時(shi)(shi)代,算(suan)力增(zeng)長放緩(huan),更多利用多核、SIMD(單指令多數據流)等并行計算(suan)技術,以及異構來釋放更大的(de)算(suan)力。相(xiang)較于 C/C++ 這些傳(chuan)統(tong)編譯型語(yu)言,Java 處在軟件棧的(de)更高抽象級別(bie),自帶 Java 標(biao)準庫,以及運行時(shi)(shi)環境,這也給 Java 創(chuang)新(xin)帶來了更多的(de)空(kong)間以及可能性。
李(li)三紅指出, Java 在多(duo)核、異構加(jia)速領(ling)域做了多(duo)方(fang)面的探索,適應與優化。比如(ru),OpenJDK 孵化的 Vector API 項目,依賴 CPU 的 SIMD 指令,獲(huo)得計算性能(neng)的成(cheng)倍提升。即將發布(bu)的 OpenJDK 19 引入了(le) Virtual Threads (Preview),旨在幫助 Java 開發者(zhe)高效處理并發 (尤其針對 IO 密集型場景) 。而在異構領域,早(zao) 2014 年(nian) JVM 技術峰會(hui),AMD 就分享了(le) Sumatra 項目,嘗試實現 JVM 與 Heterogeneous System Architecture 目標(biao)硬件交互。由 The University of Manchester 發起的 TornadoVM 項目,目標(biao)是幫助 Java 開發者(zhe)不需(xu)要(yao)了(le)解 GPU 編(bian)程語言或者(zhe)相關的 GPU 體系結構知識就可以編(bian)寫面向異構的并行程序(xu)。
在(zai) AI 方向上,Java 也在(zai)與時(shi)俱進(jin)。據李三紅介紹,在企業計(ji)算領(ling)(ling)域,Java 是被使(shi)用(yong)最多的語言之(zhi)一,但(dan)對于機器(qi)學(xue)習領(ling)(ling)域的開發,Java 一直缺乏標(biao)準(zhun)支持(chi),這個(ge)方(fang)向其(qi)實(shi)在 JCP-EC 討論(lun)也比較多。
基于(yu) Java SE 技(ji)術,在 JCP 流程內(nei)推動并最(zui)終(zhong)在 2022 年定稿的(de)(de) JSR 381 規(gui)范,其目標(biao)就是為不(bu)(bu)同(tong)領域的(de)(de) Java 機(ji)器(qi)學(xue)習開發(fa)提(ti)供(gong)(gong)通用的(de)(de)可(ke)(ke)重(zhong)用設計。JSR 381 定義了標(biao)準(zhun)的(de)(de) Java API,提(ti)供(gong)(gong)了基本機(ji)器(qi)學(xue)習、圖像分類和對象識(shi)別方面(mian)的(de)(de)處(chu)理能(neng)力(li)。“依賴(lai)于(yu)不(bu)(bu)同(tong)的(de)(de)機(ji)器(qi)學(xue)習平臺,如 TensorFlow、MXNet 以(yi)及 DeepNett 等,JSR-381 提(ti)供(gong)(gong)了不(bu)(bu)同(tong)的(de)(de)實現(xian)。對于(yu) Java 生(sheng)態內(nei)的(de)(de)開發(fa)者(zhe)來說,不(bu)(bu)必再去學(xue)習 Python, 可(ke)(ke)以(yi)依賴(lai) JSR-381 VisRec API 去構建你的(de)(de) AI 應用。”
現(xian)實中,Java 應用的(de)(de)版(ban)本(ben)升(sheng)級(ji)是較(jiao)為緩(huan)慢的(de)(de)。Java 11 (OpenJDK11)距(ju)離(li) 2018 年(nian)(nian)發(fa)布已經過去(qu)四年(nian)(nian)多(duo)(duo)(duo),目前國內大多(duo)(duo)(duo)數的(de)(de)用戶仍然停(ting)留在 Java 8。李三紅(hong)認為,動力不(bu)足(zu)是多(duo)(duo)(duo)方面的(de)(de),對開發(fa)者來(lai)說最直(zhi)接(jie)的(de)(de)原因(yin)可(ke)能是擔心升(sheng)級(ji)后兼容性帶來(lai)的(de)(de)穩定性問(wen)題,會直(zhi)接(jie)影(ying)響業務的(de)(de)連(lian)續性。
這(zhe)種(zhong)問題并不罕見。令(ling)人振奮(fen)的(de)是,處于 Java 生態(tai)中的(de)企業正在貢獻自己的(de)力量。阿里內部(bu)在大規模地(di)往 Java 11、 Java 17 遷(qian)移的(de)時候,總(zong)結了不少(shao)的(de)經(jing)驗,并且(qie)將這(zhe)些經(jing)驗通過工(gong)具的(de)方式沉淀下來。最后(hou)阿里開源了 EMT4J (Eclipse Migration Toolkit for Java) ,能夠幫助 Java 應用無縫升(sheng)級(ji)最新(xin)版本 JDK, 主要支持從 Java 8 到 Java 11,以(yi)及 17 的(de)升(sheng)級(ji)。
李三紅還補充道,對于 Java 版本的升級(ji)問題,還可以從另一(yi)個(ge)角度 ——Software Sustainability 來進一(yi)步探(tan)討(tao)。
“由 Titus Winter 等編寫的《Software Engineering at Google - Lessons Learned from Programming Over Time》一書(shu)中,談到了組織的 Codebase Sustainability 概念(nian)(nian),強調了兩個核心理念(nian)(nian):第一,無(wu)論應對的是(shi)技術需求,還是(shi)業務需求,軟件代碼應當可以(yi)做一切(qie)應該做的改變(bian)。第二,這(zhe)些改變(bian)帶來的影響是(shi)安(an)全(quan)的。
“回(hui)到 Java 版本升(sheng)(sheng)級這個問題,我們在(zai)開(kai)(kai)發 Java 應(ying)用的(de)(de)(de)(de)時(shi)候,建議(yi)應(ying)用架(jia)構師們把 Java 版本升(sheng)(sheng)級納(na)入到 Software Sustainability 這個維度下考量,對代(dai)(dai)碼(ma)開(kai)(kai)發規范進(jin)行(xing)相(xiang)關的(de)(de)(de)(de)約束。例如,不(bu)(bu)要讓(rang)你的(de)(de)(de)(de)代(dai)(dai)碼(ma)依(yi)賴 JDK 內部不(bu)(bu)公開(kai)(kai)的(de)(de)(de)(de) API,不(bu)(bu)要讓(rang)你的(de)(de)(de)(de)實(shi)現依(yi)賴特定的(de)(de)(de)(de) JDK 版本行(xing)為,不(bu)(bu)要使(shi)用被 Deprecated 的(de)(de)(de)(de) API 等等。架(jia)構的(de)(de)(de)(de)目標應(ying)當(dang)考慮 Code Sustainability,讓(rang)你的(de)(de)(de)(de) Java 應(ying)用可以在(zai)任何時(shi)候根據實(shi)際需要平滑升(sheng)(sheng)級到不(bu)(bu)同 JDK 版本,不(bu)(bu)應(ying)當(dang)因為代(dai)(dai)碼(ma)缺乏 Sustainability 而導致的(de)(de)(de)(de)盡量少的(de)(de)(de)(de)版本升(sheng)(sheng)級。”
李三紅(hong)對 Java 的未來(lai)充滿信心,源于他在 JVM 領域(yu)耕耘多年,不僅深入了解(jie) Java 特性,并(bing)且(qie)有能(neng)力進(jin)行創新性研(yan)究。
在(zai)(zai)加入阿里(li)之前(qian),李三紅一(yi)直在(zai)(zai) IBM Java 技術中心,參(can)與(yu) J9 虛擬機開發,期(qi)間領導(dao)了 JVM 多租戶項目(mu)。目(mu)前(qian)就職于阿里(li)云,領導(dao)程序語言(yan)與(yu)編譯(yi)器團(tuan)隊(dui),主要的(de)工作(zuo)是結合阿里(li)、螞蟻及云上各業(ye)務的(de)需(xu)求(qiu),在(zai)(zai)編譯(yi)器、語言(yan)運行時等基礎(chu)領域進行研(yan)究(jiu)創新(xin)。編程語(yu)言是基礎軟件的核心(xin),也是龍(long)蜥技術生態的八大方向(xiang)之一,Dragonwell 是龍(long)蜥社(she)區 Java 語(yu)言和虛(xu)擬(ni)機 SIG 下的項目。目前,在語(yu)言工具鏈(lian)這塊,已經(jing)形成 Alibaba Dragonwell (Java 生態),Alibaba Cloud Compiler (C++ 生態) 等多個產品(pin)來支撐其業(ye)務(wu),語言工具鏈相關的開(kai)源技術也在為(wei)龍蜥社區的開(kai)發者(zhe)提(ti)供支持。
2020 年,李三紅獲得了 Java 技術領導者社(she)(she)區 Java Champions 推(tui)薦,被授予 Java Champion 榮(rong)譽(yu)。Java Champion 由 Java 社(she)(she)區成員提名,并(bing)且(qie)必須得到現有 Java Champions 成員的一致(zhi)同意。唯有為(wei) Java / JVM 生態系(xi)統做(zuo)出重要貢獻(xian)的專家才能獲此(ci)榮(rong)譽(yu)。
去年,龍蜥社區理事長(chang)單位阿(a)里云第三次入選 JCP 最高執行委員會 (JCP-EC),作為阿(a)里云在(zai) JCP-EC 的代表(biao),李三紅一直在(zai)參與 JCP-EC 領(ling)導下的相關 Java 標(biao)準討(tao)論制定工作。