進擊的 Java !
編者按:近幾年,隨著雲原生時代的到來,Java 遭受了諸多質疑。國際形勢和行業格局的變化,大家一定充分感受到了雲原生這個話題的熱度,難道 Java 真的已過巔 峰時期,要走向末路了嗎?龍蜥社群 Java 語言和虛擬機器 SIG 成員、龍蜥社群 RISC-V SIG 成員李三紅就這個問題發表了他的看法。本文轉自 OSCHINA,以下為原文,歡迎閱讀:
(圖 / 李三紅)
唱衰 Java 的聲音由來已久。
尤其是近幾年,雲原生時代的到來,軟體的交付方式發生了根本性變化,Java 遭受了諸多質疑。
傳統領域的 Java 開發,交付的是 Java 應用本身,具體體現在以 “jar”“war” 的形式交付,而云原生最 佳實踐,則是基於微服務形式,以容器為基本交付單位,並在 K8S 中編排。雲原生應用要求更快速地啟動、強調資源按量消費,彈性擴充套件,以及可觀測性等。就這一層面而言,在雲原生時代,Java 的缺陷確實是天然存在的。
“事實上,Java 技術在雲原生時代也在不停地進化。” 面對唱衰 Java 的諸多論調,龍蜥社群 Java 語言和虛擬機器 SIG 成員、龍蜥社群 RISC-V SIG 成員、阿里雲程式語言與編譯器團隊負責人、Java Champion 李三紅選擇理性看待。
“比如更多支援容器部署的特性已經加入到 OpenJDK 版本。一直被人詬病的 Java 啟動慢的問題,目前基於 OpenJDK 技術的幾個創新專案正在多個不同方向探索,包括 CRaC (Coordinated Restore at Checkpoint) 、Leyden,以及由阿里和 Google 作為主要貢獻者的 Fast Startup Incubator 等專案。在資源彈性使用方面,由 Alibaba Dragonwell 提供的 ElasticHeap 功能,主要目的是解決雲端計算環境下 Java 記憶體資源使用的彈性問題。最後,OpenJDK 的 JFR 以及 JFR Streaming 技術為構建 Java 雲原生可觀測工具提供了重要的技術支撐。”
Java 面臨的挑戰,不僅僅是雲原生。
李三紅認為,從 1995 年 Java 1.0 釋出算起, Java 技術這二十多年的發展,大致存在一明一暗兩條線的驅動。“一條暗線,是指 Java 或者說支撐 Java 的底層 JVM 技術適配計算機架構的演進與發展。一條明線,是指 Java 作為一個開發者工具,本質是要面向業務領域解決業務問題的,所以自然而然地推動了 Java 在雲原生,AI 等方向的演進,解決這些領域內碰到的問題與挑戰。”
後摩爾時代,算力增長放緩,更多利用多核、SIMD(單指令多資料流)等平行計算技術,以及異構來釋放更大的算力。相較於 C/C++ 這些傳統編譯型語言,Java 處在軟體棧的更高抽象級別,自帶 Java 標準庫,以及執行時環境,這也給 Java 創新帶來了更多的空間以及可能性。
李三紅指出, Java 在多核、異構加速領域做了多方面的探索,適應與最佳化。比如,OpenJDK 孵化的 Vector API 專案,依賴 CPU 的 SIMD 指令,獲得計算效能的成倍提升。即將釋出的 OpenJDK 19 引入了 Virtual Threads (Preview),旨在幫助 Java 開發者高效處理併發 (尤其針對 IO 密集型場景) 。而在異構領域,早 2014 年 JVM 技術峰會,AMD 就分享了 Sumatra 專案,嘗試實現 JVM 與 Heterogeneous System Architecture 目標硬體互動。由 The University of Manchester 發起的 TornadoVM 專案,目標是幫助 Java 開發者不需要了解 GPU 程式語言或者相關的 GPU 體系結構知識就可以編寫面向異構的並行程式。
在 AI 方向上,Java 也在與時俱進。據李三紅介紹,在企業計算領域,Java 是被使用最多的語言之一,但對於機器學習領域的開發,Java 一直缺乏標準支援,這個方向其實在 JCP-EC 討論也比較多。
基於 Java SE 技術,在 JCP 流程內推動並最終在 2022 年定稿的 JSR 381 規範,其目標就是為不同領域的 Java 機器學習開發提供通用的可重用設計。JSR 381 定義了標準的 Java API,提供了基本機器學習、影像分類和物件識別方面的處理能力。“依賴於不同的機器學習平臺,如 TensorFlow、MXNet 以及 DeepNett 等,JSR-381 提供了不同的實現。對於 Java 生態內的開發者來說,不必再去學習 Python, 可以依賴 JSR-381 VisRec API 去構建你的 AI 應用。”
現實中,Java 應用的版本升級是較為緩慢的。Java 11 (OpenJDK11)距離 2018 年釋出已經過去四年多,目前國內大多數的使用者仍然停留在 Java 8。李三紅認為,動力不足是多方面的,對開發者來說最直接的原因可能是擔心升級後相容性帶來的穩定性問題,會直接影響業務的連續性。
這種問題並不罕見。令人振奮的是,處於 Java 生態中的企業正在貢獻自己的力量。阿里內部在大規模地往 Java 11、 Java 17 遷移的時候,總結了不少的經驗,並且將這些經驗透過工具的方式沉澱下來。最後阿里開源了 EMT4J (Eclipse Migration Toolkit for Java) ,能夠幫助 Java 應用無縫升級最新版本 JDK, 主要支援從 Java 8 到 Java 11,以及 17 的升級。
李三紅還補充道,對於 Java 版本的升級問題,還可以從另一個角度 ——Software Sustainability 來進一步探討。
“由 Titus Winter 等編寫的《Software Engineering at Google - Lessons Learned from Programming Over Time》一書中,談到了組織的 Codebase Sustainability 概念,強調了兩個核心理念:第一,無論應對的是技術需求,還是業務需求,軟體程式碼應當可以做一切應該做的改變。第二,這些改變帶來的影響是安全的。
“回到 Java 版本升級這個問題,我們在開發 Java 應用的時候,建議應用架構師們把 Java 版本升級納入到 Software Sustainability 這個維度下考量,對程式碼開發規範進行相關的約束。例如,不要讓你的程式碼依賴 JDK 內部不公開的 API,不要讓你的實現依賴特定的 JDK 版本行為,不要使用被 Deprecated 的 API 等等。架構的目標應當考慮 Code Sustainability,讓你的 Java 應用可以在任何時候根據實際需要平滑升級到不同 JDK 版本,不應當因為程式碼缺乏 Sustainability 而導致的儘量少的版本升級。”
李三紅對 Java 的未來充滿信心,源於他在 JVM 領域耕耘多年,不僅深入瞭解 Java 特性,並且有能力進行創新性研究。
在加入阿里之前,李三紅一直在 IBM Java 技術中心,參與 J9 虛擬機器開發,期間領導了 JVM 多租戶專案。目前就職於阿里雲,領導程式語言與編譯器團隊,主要的工作是結合阿里、螞蟻及雲上各業務的需求,在編譯器、語言執行時等基礎領域進行研究創新。程式語言是基礎軟體的核心,也是龍蜥技術生態的八大方向之一,Dragonwell 是龍蜥社群 Java 語言和虛擬機器 SIG下的專案。目前,在語言工具鏈這塊,已經形成 Alibaba Dragonwell (Java 生態),Alibaba Cloud Compiler (C++ 生態) 等多個產品來支撐其業務,語言工具鏈相關的開源技術也在為龍蜥社群的開發者提供支援。
2020 年,李三紅獲得了 Java 技術領 導 者社群 Java Champions 推薦,被授予 Java Champion 榮譽。Java Champion 由 Java 社群成員提名,並且必須得到現有 Java Champions 成員的一致同意。唯有為 Java / JVM 生態系統做出重要貢獻的專家才能獲此榮譽。
去年,龍蜥社群理事長單位 阿里雲第三次入選 JCP 最高執行委員會 (JCP-EC),作為阿里雲在 JCP-EC 的代表,李三紅一直在參與 JCP-EC 領導下的相關 Java 標準討論制定工作。
活動預告
全球開源技術峰會(Global Open-source Technology Conference),簡稱 GOTC,是由開放原子開源基金會、 Linux 基金會亞太區、上海浦東軟體園和開源中國聯合發起的,面向全球開發者的一場盛大開源技術盛宴。5 月 27 日至 28 日,GOTC 2023 將於上海舉辦為期 2 天的開源行業盛會。大會將以行業展覽、主題發言、特別論壇、分論壇的形式展現,與會者將一起探討元宇宙、3D 與遊戲、eBPF、Web3.0、區塊鏈等熱門技術主題,以及開源社群、AIGC、汽車軟體、開源商業化、開源教育培訓、雲原生等熱門話題,探討開源未來,助力開源發展。
此次大會,龍蜥社群 Java 語言和虛擬機器 SIG 成員、龍蜥社群 RISC-V SIG 成員李三紅受邀擔任 “基礎設施與軟體架構” 分論壇的出品人。該分論壇入選的議題,是經過了李三紅和大會組委會深入討論,精心安排的。希望從多個維度,最 大 程 度覆蓋了基礎軟體各領域的介紹分享。既有最 底層晶片技術 (RISC-V) 的話題,也包括了像 C++、Java 語言執行時的內容,還包含了應用最廣泛的中介軟體 Dubbo、RocketMQ、 Kafka 等內容的分享。
2023 年 5 月 28 日(週日),GOTC 2023 “基礎設施與軟體架構” 分論壇將為開發者們提供基礎架構領域最豐富、最前沿、以及最 具技術性的內容分享。期待各位的蒞臨。
GOTC 2023 報名通道現已開啟,歡迎報名參會!
—— 完 ——
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70004278/viewspace-2947403/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 進擊的 JavaScript(六) 之 thisJavaScript
- 進擊的觀察者模式模式
- DDoS攻擊是什麼?是如何進行攻擊的?
- 進擊的哈士奇-框模型的學習模型
- 我的研發進擊路(3.31)
- 進擊的佈局之Grid Layout
- 進擊的 JavaScript(四) 之 閉包JavaScript
- 進擊的 JavaScript 之(七) 原型鏈JavaScript原型
- 「進擊的前端工程師」CSS色彩揭秘前端工程師CSS
- 高德地圖的四處進擊地圖
- 進擊RDC的第三天(3.23)
- JS進擊之路:閉包JS
- JS進擊之路:作用域JS
- 進擊的 Spring Cloud Alibaba —— 框架與服務SpringCloud框架
- 進擊的模組化+webpack的簡單實現Web
- 進擊的盲盒---盲盒跑圈的本質
- 進擊的Bug---那些年我遇到的大坑3
- 利用JSONP進行水坑攻擊JSON
- Java中引進的介面Java
- 進擊的WebRTC:我們為什麼需要它?Web
- 智慧運維的進擊:從邊緣走向中心運維
- SegmentFault 思否技術週刊 -- 進擊的 ReactReact
- 快速進擊的挖礦殭屍網路:單日攻擊破10萬次
- 【面經】Java面試突擊Java面試
- 進擊的 Vulkan 移動開發之 Instance & Device & Queue移動開發dev
- 周大俠啊進擊的JavaScript(八)之繼承JavaScript繼承
- 周大俠啊進擊的JavaScript(四)之閉包JavaScript
- 進擊的 Kubernetes 排程系統(一):Kubernetes scheduling frameworkFramework
- 進擊的國產資料庫 GBase11月適配認證46連擊資料庫
- 走進JavaJava
- Epic商店的進擊之路,論羊毛王如何初長成
- 中華財險進擊數字化
- js進擊--一些常用小方法JS
- Java 安全之:csrf攻擊總結Java
- 使用singleflight防止快取擊穿(Java)快取Java
- AI金融「互動應用」的窘境與進擊的獨角獸AI
- Java8的CompletableFuture進階之道Java
- 《Effective Java》--Java進階必備Java