成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Java 正青春:現狀與技術趨勢報告

開發 開發工具
本文將從 JavaSE 開源現狀、OpenJDK 版本生態到 OpenJDK 技術趨勢三個方面講述當前基礎 Java 技術的現狀,進一步討論在云原生、AI、多語言生態領域支撐 Java 應用的基石——Java Virtual Machine (JVM) 技術,面向未來的演進趨勢。

在《Java 開發手冊》泰山版發布之際,我們來總結思考一下 Java 的最新技術動向和未來。本文將從 JavaSE 開源現狀、OpenJDK 版本生態到 OpenJDK 技術趨勢三個方面講述當前基礎 Java 技術的現狀,進一步討論在云原生、AI、多語言生態領域支撐 Java 應用的基石——Java Virtual Machine (JVM) 技術,面向未來的演進趨勢。

背景

1991 年,James Gosling 帶領團隊開始了一個叫"Oak"的項目,這個就是 Java 的前身。1995 年,Java1.0 發布?!癢rite once, run anywhere"這句 Java 口號想必大家耳熟能詳。Java 剛開始出現的時候主要面向 Interactive Television 領域,直至后來幾年的發展,當時的 SUN(后來在 2010 年被 Oracle 收購)一度想用 Java 來打造桌面的網絡操作系統,取代當時如日中天的 Windows。不過 Java 后來的發展,不曾想雖未在桌面領域內取得多大的建樹,出乎意料地,卻在企業級應用領域開花結果,占據了如今幾乎統治的地位。失之東隅,卻收之桑榆。

JavaSE 開源現狀

Sun 在 2006 年的 Java One 大會上,宣布 Java 技術開源,隨后 2006 年底在 GPL 協議下發布 HotSpot 以及 javac,這是 Java 發展中的里程碑事件。阿里巴巴最早在 2012 簽署 OCA,并參與到了 OpenJDK 的開發。

??

??

 

OpenJDK 是 JavaSE 開源的 Reference Implementation。在 JavaOne 2017 的 Keynote 上 (2018 年 JavaOne 被 Oracle 重命名為 CodeOne),Oracle 承諾將開源所有的 OracleJDK 里包含的商業實現功能[1]。

??

??

 

在 2018 年發布的 Java11, Oracle 已經讓 OpenJDK 和 Oracle JDK 兩者的二進制文件在功能上盡可能相互接近,盡管 OpenJDK 與 OracleJDK 兩者在一些選項之間仍然存在一些差異[2]。

另外,除了 OpenJDK 這條主線,在最近的幾年里,Java 基礎技術的開源有愈演愈烈趨勢:2017 年,IBM 將內部使用 20 多年之久的 J9 虛擬機開源,并貢獻到 Eclipse Foundation, 而隨后 2018 年,Oracle 開源 GraalVM 1.0,其核心包含用 Java 寫的Just-in-Time compiler/Graal, SubstrateVM 以及支持多語言解釋器的 Truffle 框架。各個企業開源的主要動機,想通過開源構建并受益于一個更為強大的語言生態系統。

云 + 開源結合在一起,使得普通開發者以較低的門檻獲得一流工具(鏈)的使用和體驗,任何一家企業都可以像任何大型組織一樣,使用的相同技術(democratizing),這是開發者的黃金時代。

Java is Still Free: 你該選擇什么樣的 JDK?

Java 仍然免費,但隨著 OracleJDK License 變化開始轉向收費,OpenJDK 會逐漸取代 OracleJDK 成為市場主流,這點也可以從 JVM 2020 生態報告中看出趨勢:OracleJDK 從前一年的 70% 的開發者選擇使用率降到 2020 年的 34%。

OracleJDK 收費,在客觀上也加劇了 OpenJDK 生態的碎片化趨勢,出現了包括 Alibaba Dragonwell 在內的多個基于 OpenJDK 的可選實現。

企業在選擇使用那個 Java Vendor 的 JDK 版本時,幾個方面的考慮因素可以參考:

  • 安全與穩定:是否會及時同步上游的最新更新,包括安全補丁,關鍵的問題修復等。
  • JavaSE 標準兼容 :是否與標準 Java 兼容。
  • 性能與效率:是否可以在問題診斷,性能調優方面提供有效的工具支持,幫助一線的開發同學高效地解決 Java 問題。在 JVM,到 JDK (Class library) 層面,是否有面向企業業務場景的優化特性,可以幫助提升資源的利用率,生產系統的穩定性等等。
  • 快速的新技術采納:伴隨收費,Oracle 管理 Java 版本生命周期采用了 Long Term Support(LTS) 的概念,Oracle 每三年會指定一個 LTS 的 Java 版本, Java 8/11 都是 LTS 版本。大部分企業,尤其是大中型企業很難跟上 Java 每六個月一發布的節奏,像 Java 12,13 這樣的 Feature Release(FR) 版本。那么問題來了,如果你選擇 Stay 在 LTS 版本上,比如 Java 11,在新版本 (Java11+) 發布的 JVM/JDK 技術,是否可以在不升級的情況下,提前享受這些技術紅利?

這里分享下 Alibaba Dragonwell 在這些方面的計劃與思考。

Alibaba Dragonwell 是阿里巴巴內部廣泛使用的 AJDK (AlibabaJDK) 的開源版本,Alibaba Dragonwell 作為基石,支撐了阿里經濟體內幾乎所有的 Java 業務,經過了雙 11 等大促的考驗。Alibaba Dragonwell 主要針對的場景是數據中心大規模 Java 應用部署情況下,Java 應用穩定性、效率以及性能的優化與提高。

2019 年 3 月阿里開源 Alibaba Dragonwll 8.0.0,我們也一直正在踐行開源時候的承諾,AJDK 內部使用的特性在逐步開源。到剛剛發布 Alibaba Dragonwell 8.3.3,我們已經開源了 JWarmup,ElasticHeap,多租戶,JFR 等眾多功能,協程 Wisp 2.0,GCIH 等也在開源的規劃上。

??

??

 

同時,Alibaba Dragonwell 作為 OpenJDK 的下游,每個發行版都會同步上游最新更新,包括安全更新,問題修復等,并經過阿里內部大規模的應用集群測試。

在新技術 Adoption 方面,Alibaba Dragonwell 目前發布和維護了 Java 8,11 兩個 LTS 版本,阿里 JVM 團隊會根據實際業務狀況,移植 Java11+ 的相關功能到 Java 8 和 11 兩個版本,這樣 Alibaba Dragonwell 用戶可以在不跟進 Java 12,13 等這些 FR 版本的情況下,提前享受這些功能帶來的技術紅利。

OpenJDK技術趨勢

縱觀 Java 技術 20 多年的發展,始終圍繞著兩大主題:Productivity 以及 Performance。在很多情況下,Java 在設計上 Productivity 是優于 Performance 考慮的。Java 引入的 Garbage Collector 把程序員從復雜的內存管理中解脫出來,但在另一方面 Java 應用始終困擾于 GC 暫停時間的影響。Java 基于棧式虛擬機的中間字節碼設計,很好地抽象了不同平臺 (Intel, ARM 等) 的差異性,同時通過 Just-in-Time (JIT) 編譯技術,解決的 Java 應用 peak 性能, 但在另一方面 JIT 不可避免引入了 Warmup 的代價,正常情況下 Java 程序永遠需要先 load class,解釋執行,然后再到高度優化的代碼執行。

如果從 JVM 視角來總結梳理下目前 OpenJDK 社區正在發生,孵化的相關技術,主要從工具,GC,編譯器,以及 Runtime 四個方面進行一個主要概括:

??

??

 

JFR/JMC

Oracle 從 Java 11 開源了其之前一直作為商業功能的 JFR,JFR 是功能強大的 Java 應用問題診斷與性能剖析工具。阿里巴巴也是作為主要的貢獻者,與社區包括 RedHat 等,一起將 JFR 移植到了 OpenJDK 8, 預計 2020 年 7 月即將發布的 OpenJDK 8u262 (Java8) 將會默認帶有 JFR 功能,這樣 Java 8 的用戶可以基于這個版本免費使用 JFR 功能。

ZGC/Shandoath

無論是 Oracle 在 Java 11 發布的 ZGC,還是 RedHat 已經做了好幾年的 Shandoath,都實現了 concurrent copy GC,解決 Large Heap 情況下的 GC 停機性能。ZGC 最新狀態,在 9 月份即將發布的 JDK 15,ZGC 將從 Experimental 功能變為生產可用 [3] 。實際上,在 AJDK 11 上,阿里巴巴團隊 JVM 團隊已經做了大量 Java 11+ 到 Java 11 的 ZGC 移植工作,以及相關問題修復,2019 年雙 11 和阿里數據庫團隊一起,讓數據庫應用運行在 ZGC 上,100+ GB Heap 情況下 GC 暫停時間可以保持在 <10ms 以內, 詳細討論參考[4]。

Graal

用 Java 開發的新一代 Just-in-Time 編譯技術,用來替代目前 HostSot JVM 的 C1/C2 編譯器,OpenJDK 上的 Ahead-of-Time (AOT) 技術也是基于 Graal 編譯器開發。

Loom

OpenJDK 社區協程項目,對應于 AJDK 的 Wisp 2.0 實現,詳細討論可以參考[5]。

進擊的 Java:面向未來演進

2020,站在一個全新的節點上,本文也從三個大的方面 Cloud Native, AI,以及多語言生態三個方面展望下未來的發展,有些討論本身是超越 Java 本身的。

面向 Cloud Native 的語言進化

云原生時代,軟件的交付方式發生的根本性變化。以 Java 為例,在之前 Java 開發者交付的是應用本身,具體體現在以 "jar", "war" 的形式交付, 而云原生則是以 Container 為交付單位的:

??

??

 

在運行方面,面向 Cloud Native 的應用要求:

  • Reactive
  • Always Watching
  • Extreme low memory footprint
  • Quick boot time

Java 語言作為企業計算,互聯網領域的王者,擁有一致性,豐富的構建在 Java 語言之上的生態系統, 豐富的三方庫,多樣的 Serviceability 支持等,隨著云時代應用微服務化,Serverless,這些新的架構逐漸觸及到了 Java 程序速度提升的天花板 —— Java 自身的啟動運行開銷。

在 Cloud Native 這個新的上下文里, 我們談論語言的進化,絕不僅僅限于運行時,編譯器層面, 新的計算形態一定伴隨著編程模型的變革,這涉及圍繞程序語言的 Library,Framework,Tools 等一系列配套的改革。從目前業界來看,也有不少的項目正在發生:配合 GraalVM/SVM (Java 靜態編譯技術) 的下一代編程框架 Quarkus, Micronaut, 以及 Helidon,Quarkus 更是提出了“container first” ,他們提倡的分層的 lightweight uber-jar 的概念正是符合了 container 交付這一趨勢。而 Red Hat 的 Java 團隊與 OS 團隊合作的"Checkpoint Restore Fast Start-up"技術 (AZul 在 JVM 技術峰會 '2019 上也提出過類似的想法) 則是在更加底層的技術棧上解決 Java 快速拉起問題。

在 Java for Cloud Native 方向,我們也開展了相關研發工作。Java 是靜態語言,但是包含了大量的動態特性,包括反射,Class Loading,Bytecode Instrument (BCI) 等等,這些動態特性本質上都是違反 GraalVM/SVM 所要求的 Closed-World Assumption (CWA) 原則,這也是導致傳統跑在 JVM 的 Java 應用不容易在 SVM 編譯運行的主要原因。阿里巴巴 JVM 團隊對 AJDK 做了靜態化裁剪,務求在 Java 靜/動態特性之間找到一個確定的邊界,從 JDK 的層面為 Java 靜態編譯提供可能性。同時向上,與螞蟻中間團隊合作,定義面向靜態編譯的 Java 編程模型,通過編程框架來約束 - Java 應用的開發是面向靜態編譯友好的。我們靜態編譯了基于螞蟻開源中間件 SOFAStack 構建的服務注冊中心 Meta 節點應用,相較于傳統 的運行在 JVM上,性能有量級的提升:服務啟動時間降低了 17 倍,可執行文件大小降低了 3.4 倍,運行時內存降低了一半。詳見[6]。

AI 的興起,編程語言異構計算的新挑戰

2005 年,時任 Intel CTO 的 Justin Rattner,說過 “We are at the cusp of a transition to multicore, multithreaded architectures”, 在前后的十幾年中, 編程語言與編譯器領域一直在努力面向 parallel architectural paradigm 做優化探索。隨著 AI這些年的興起, 不同的時間節點,相似的場景,面向 FPGA/GPU 異構計算場景,對編程語言與編譯器領域提出了新的挑戰。

除了傳統 Compiler 諸如 IBM XL Compilers, Intel Compilers 等做的 Automatic Parallelizing 工作,在極致性能探索方面,基于多面體模型 (polytope model) 的編譯優化技術作為解決程序并行化、數據局部性優化的一種手段,成為編譯優化領域的研究熱點。

而在 Parallel Languages 層面,對 C&C++ 開發人員,CUDA 的出現降低了 GPU 的編程門檻,但 GPU 和 CPU 兩種硬件模型本質區別,導致過高的開發成本,需要學習和了解更多底層硬件細節,還更不用說更高級語言的開發語言像 Java 等所面臨的底層硬件模型與高級語言之間巨大的 GAP。

在 Java 領域,最早在 JVM 技術峰會 '2014,AMD 曾經分享過他們的 Sumatra 項目,嘗試實現 JVM 與 Heterogeneous System Architecture 目標硬件交互。而在最近,由 The University of Manchester 發起的 TornadoVM 項目,實現包含:一個 Just-in-Time 編譯,支持從 Java bytecode 到 OpenCL 的映射,一個優化的運行時引擎,以及可以保持 Java 堆和異構設備堆內存一致性的內存管理器。TornadoVM 的目標是開發人員不需要了解 GPU 編程語言或者相關的 GPU 體系結構知識就可以編寫面向異構的并行程序。TornadoVM 可以透明地運行在 AMD GPUs, NVIDIA GPUs, Intel integrated GPUs 以及 multi-core CPUs 上。

在通用 CPU 領域, OpenJDK 社區的 Vector API 項目 (Panama 的子項目),依賴 CPU 的 SIMD 指令,獲得計算性能的成倍提升,Vector API 在大數據,AI 計算也有非常廣的應用場景。阿里 JVM 團隊把 Vector API 移植到了 AJDK 11,后續會開源到 Alibaba Dragonwell,分享下我們獲得的基礎性能數據:

??

??

 

時間 (單位: milliseconds) 越短,性能越好

Polyglot Programing,鏈接多語言生態

Polyglot Programming 并不是一個新的概念。在 Managed Runtime 領域, 2017 年 IBM 開源 Open Managed Runtime(OMR), 以及 2018 年 Oracle 開源 Truffle/Graal 技術。OMR 和 Graal 技術讓開發人員實現一個新的語言成本大幅下降。前者 OMR 以 C、C++ 組件的形式提供了 Garbage Collection (GC), Just-in-Time (JIT) 以及 Reliability, availability and serviceability (RAS,工具)等, 開發人員可以依賴這些組件,通過 'glue' 的方式基于這些組件實現自己的高性能語言。而后者 Truffle/Graal, Truffle 是一個依賴 AST parser 實現新的語言的 Java 框架,本質上是將你的新的語言映射到 JVM 世界。不同于 Scala, JRuby 這些圍繞 JVM 生態本身構建的語言,他們本質是還是 Java, 無論是 OMR, 還是 Truffle/Graal,他們都提供了生產級的 GC,JIT,以及 RAS 服務支持,新開發的語言完全不需要再重新實現這些底層技術。

從業界來看,面向特定領域的 Domain Specific Language (DSL) 語言已經有向這些技術遷移的趨勢,高盛正在與 Graal 社區合作,把他們的 DSL 遷移到 Graal 上。另外 Ruby/OMR, Python/Graal, JS/Graal,WASM/Graal 等這些真正鏈接不同語言生態的項目,也正在迅速發展起來。

回到 AJDK, Graal 已經在 AJDK 8 開始支持, JS/Graal 這樣成熟的技術,已經在阿里內部業務上線。

最后

Java 是一項二十多年前被發明出來的技術,她歷經磨難,幾易其主,但卻歷久彌新。這篇報告旨在為 Java 的開發者們梳理下目前的 Java 技術現狀,以及討論在云,AI 等這些重要領域內 Java 技術的演進趨勢。在介紹的相關部分,我們也穿插了阿里的一些工程實踐。作為世界上最大的 Java 用戶之一,我們也一直在探索把前沿的 Java 技術,通過在阿里豐富的業務場景的試驗,真正把這些技術應用于真實的生產環境。我們也非常樂于分享和貢獻 Java 領域的經驗、實踐與技術洞見,包括明天即將發布的《Java 開發手冊》,共同促進 Java 的發展。

參考

[1]https://www.infoq.com/news/2017/10/javaone-opening/[2]https://www.oracle.com/technetwork/java/javase/11-relnote-issues-5012449.html#Diffs[3]https://openjdk.java.net/jeps/377[4]https://mp.weixin.qq.com/s/FQpvT5wIy9xwhX2jHMU7aw [5]https://mp.weixin.qq.com/s/K1us6aH-gjHsWGhQ3SulFg[6]https://www.infoq.cn/article/uzHpEbpMwiYd85jYslka

【本文為51CTO專欄作者“阿里巴巴官方技術”原創稿件,轉載請聯系原作者】

 

??戳這里,看該作者更多好文??

責任編輯:武曉燕 來源: 51CTO專欄
相關推薦

2020-05-19 10:22:24

云計算多云公共云

2021-06-10 19:10:32

大數據大數據應用大數據技術

2015-10-27 13:17:35

生物識別生物識別技術

2023-09-12 10:11:29

2022-01-10 11:55:28

汽車智能技術

2010-06-09 17:02:51

2017-02-15 08:40:03

2015-05-22 16:01:11

傳送網傳送網技術

2013-10-11 13:34:59

NFC現狀趨勢

2018-06-04 10:38:41

5G通信網絡3GPP

2020-10-23 21:11:40

技術科技人工智能

2012-04-27 14:23:08

開放平臺

2021-06-17 10:44:08

混合云云計算私有云

2022-02-21 18:45:31

自動駕駛智能技術

2014-02-09 09:49:32

2013-07-15 09:52:01

100G傳輸100G

2015-07-07 14:26:53

無線充電技術

2013-07-01 13:55:00

100G光傳輸趨勢

2009-02-17 18:17:42

2010-04-26 15:27:07

互聯網
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩激情在线 | 一本色道精品久久一区二区三区 | 福利社午夜影院 | 在线中文字幕av | 麻豆av免费观看 | 污视频免费在线观看 | 日韩欧美一区二区三区四区 | 91成人在线| 韩三级在线观看 | 成人免费视频网站在线看 | 色天堂影院| 久久69精品久久久久久国产越南 | 国产成人一区二 | 一区二区在线免费观看 | 99亚洲精品| 国产玖玖| 久久69精品久久久久久国产越南 | 黄视频免费在线 | 亚洲91精品 | 九九热在线免费视频 | 国产精品揄拍一区二区久久国内亚洲精 | 一区二区三区不卡视频 | 午夜精品久久久久久久久久久久 | 中文字幕第100页 | 久久精品国产99国产精品 | 一区二区亚洲 | 久久久国产一区二区三区 | 自拍偷拍亚洲欧美 | 日韩午夜网站 | 粉嫩一区二区三区性色av | 国产成人网 | www.天天操.com | 国产午夜精品一区二区三区在线观看 | 欧美中文字幕一区二区 | 日韩黄 | 黄色片免费看 | 天天天天操| 国产精品久久久久aaaa | 国产免费福利小视频 | 日韩国产一区二区三区 | 日韩欧美字幕 |