自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Java 正青春:現(xiàn)狀與技術(shù)趨勢報(bào)告

開發(fā) 開發(fā)工具
本文將從 JavaSE 開源現(xiàn)狀、OpenJDK 版本生態(tài)到 OpenJDK 技術(shù)趨勢三個(gè)方面講述當(dāng)前基礎(chǔ) Java 技術(shù)的現(xiàn)狀,進(jìn)一步討論在云原生、AI、多語言生態(tài)領(lǐng)域支撐 Java 應(yīng)用的基石——Java Virtual Machine (JVM) 技術(shù),面向未來的演進(jìn)趨勢。

在《Java 開發(fā)手冊》泰山版發(fā)布之際,我們來總結(jié)思考一下 Java 的最新技術(shù)動(dòng)向和未來。本文將從 JavaSE 開源現(xiàn)狀、OpenJDK 版本生態(tài)到 OpenJDK 技術(shù)趨勢三個(gè)方面講述當(dāng)前基礎(chǔ) Java 技術(shù)的現(xiàn)狀,進(jìn)一步討論在云原生、AI、多語言生態(tài)領(lǐng)域支撐 Java 應(yīng)用的基石——Java Virtual Machine (JVM) 技術(shù),面向未來的演進(jìn)趨勢。

背景

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

JavaSE 開源現(xiàn)狀

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

??

??

 

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

??

??

 

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

另外,除了 OpenJDK 這條主線,在最近的幾年里,Java 基礎(chǔ)技術(shù)的開源有愈演愈烈趨勢:2017 年,IBM 將內(nèi)部使用 20 多年之久的 J9 虛擬機(jī)開源,并貢獻(xiàn)到 Eclipse Foundation, 而隨后 2018 年,Oracle 開源 GraalVM 1.0,其核心包含用 Java 寫的Just-in-Time compiler/Graal, SubstrateVM 以及支持多語言解釋器的 Truffle 框架。各個(gè)企業(yè)開源的主要?jiǎng)訖C(jī),想通過開源構(gòu)建并受益于一個(gè)更為強(qiáng)大的語言生態(tài)系統(tǒng)。

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

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

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

OracleJDK 收費(fèi),在客觀上也加劇了 OpenJDK 生態(tài)的碎片化趨勢,出現(xiàn)了包括 Alibaba Dragonwell 在內(nèi)的多個(gè)基于 OpenJDK 的可選實(shí)現(xiàn)。

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

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

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

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

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

??

??

 

同時(shí),Alibaba Dragonwell 作為 OpenJDK 的下游,每個(gè)發(fā)行版都會同步上游最新更新,包括安全更新,問題修復(fù)等,并經(jīng)過阿里內(nèi)部大規(guī)模的應(yīng)用集群測試。

在新技術(shù) Adoption 方面,Alibaba Dragonwell 目前發(fā)布和維護(hù)了 Java 8,11 兩個(gè) LTS 版本,阿里 JVM 團(tuán)隊(duì)會根據(jù)實(shí)際業(yè)務(wù)狀況,移植 Java11+ 的相關(guān)功能到 Java 8 和 11 兩個(gè)版本,這樣 Alibaba Dragonwell 用戶可以在不跟進(jìn) Java 12,13 等這些 FR 版本的情況下,提前享受這些功能帶來的技術(shù)紅利。

OpenJDK技術(shù)趨勢

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

如果從 JVM 視角來總結(jié)梳理下目前 OpenJDK 社區(qū)正在發(fā)生,孵化的相關(guān)技術(shù),主要從工具,GC,編譯器,以及 Runtime 四個(gè)方面進(jìn)行一個(gè)主要概括:

??

??

 

JFR/JMC

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

ZGC/Shandoath

無論是 Oracle 在 Java 11 發(fā)布的 ZGC,還是 RedHat 已經(jīng)做了好幾年的 Shandoath,都實(shí)現(xiàn)了 concurrent copy GC,解決 Large Heap 情況下的 GC 停機(jī)性能。ZGC 最新狀態(tài),在 9 月份即將發(fā)布的 JDK 15,ZGC 將從 Experimental 功能變?yōu)樯a(chǎn)可用 [3] 。實(shí)際上,在 AJDK 11 上,阿里巴巴團(tuán)隊(duì) JVM 團(tuán)隊(duì)已經(jīng)做了大量 Java 11+ 到 Java 11 的 ZGC 移植工作,以及相關(guān)問題修復(fù),2019 年雙 11 和阿里數(shù)據(jù)庫團(tuán)隊(duì)一起,讓數(shù)據(jù)庫應(yīng)用運(yùn)行在 ZGC 上,100+ GB Heap 情況下 GC 暫停時(shí)間可以保持在 <10ms 以內(nèi), 詳細(xì)討論參考[4]。

Graal

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

Loom

OpenJDK 社區(qū)協(xié)程項(xiàng)目,對應(yīng)于 AJDK 的 Wisp 2.0 實(shí)現(xiàn),詳細(xì)討論可以參考[5]。

進(jìn)擊的 Java:面向未來演進(jìn)

2020,站在一個(gè)全新的節(jié)點(diǎn)上,本文也從三個(gè)大的方面 Cloud Native, AI,以及多語言生態(tài)三個(gè)方面展望下未來的發(fā)展,有些討論本身是超越 Java 本身的。

面向 Cloud Native 的語言進(jìn)化

云原生時(shí)代,軟件的交付方式發(fā)生的根本性變化。以 Java 為例,在之前 Java 開發(fā)者交付的是應(yīng)用本身,具體體現(xiàn)在以 "jar", "war" 的形式交付, 而云原生則是以 Container 為交付單位的:

??

??

 

在運(yùn)行方面,面向 Cloud Native 的應(yīng)用要求:

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

Java 語言作為企業(yè)計(jì)算,互聯(lián)網(wǎng)領(lǐng)域的王者,擁有一致性,豐富的構(gòu)建在 Java 語言之上的生態(tài)系統(tǒng), 豐富的三方庫,多樣的 Serviceability 支持等,隨著云時(shí)代應(yīng)用微服務(wù)化,Serverless,這些新的架構(gòu)逐漸觸及到了 Java 程序速度提升的天花板 —— Java 自身的啟動(dòng)運(yùn)行開銷。

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

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

AI 的興起,編程語言異構(gòu)計(jì)算的新挑戰(zhàn)

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

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

而在 Parallel Languages 層面,對 C&C++ 開發(fā)人員,CUDA 的出現(xiàn)降低了 GPU 的編程門檻,但 GPU 和 CPU 兩種硬件模型本質(zhì)區(qū)別,導(dǎo)致過高的開發(fā)成本,需要學(xué)習(xí)和了解更多底層硬件細(xì)節(jié),還更不用說更高級語言的開發(fā)語言像 Java 等所面臨的底層硬件模型與高級語言之間巨大的 GAP。

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

在通用 CPU 領(lǐng)域, OpenJDK 社區(qū)的 Vector API 項(xiàng)目 (Panama 的子項(xiàng)目),依賴 CPU 的 SIMD 指令,獲得計(jì)算性能的成倍提升,Vector API 在大數(shù)據(jù),AI 計(jì)算也有非常廣的應(yīng)用場景。阿里 JVM 團(tuán)隊(duì)把 Vector API 移植到了 AJDK 11,后續(xù)會開源到 Alibaba Dragonwell,分享下我們獲得的基礎(chǔ)性能數(shù)據(jù):

??

??

 

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

Polyglot Programing,鏈接多語言生態(tài)

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

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

回到 AJDK, Graal 已經(jīng)在 AJDK 8 開始支持, JS/Graal 這樣成熟的技術(shù),已經(jīng)在阿里內(nèi)部業(yè)務(wù)上線。

最后

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

參考

[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專欄作者“阿里巴巴官方技術(shù)”原創(chuàng)稿件,轉(zhuǎn)載請聯(lián)系原作者】

 

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

責(zé)任編輯:武曉燕 來源: 51CTO專欄
相關(guān)推薦

2020-05-19 10:22:24

云計(jì)算多云公共云

2021-06-10 19:10:32

大數(shù)據(jù)大數(shù)據(jù)應(yīng)用大數(shù)據(jù)技術(shù)

2015-10-27 13:17:35

生物識別生物識別技術(shù)

2023-09-12 10:11:29

2022-01-10 11:55:28

汽車智能技術(shù)

2010-06-09 17:02:51

2017-02-15 08:40:03

2015-05-22 16:01:11

傳送網(wǎng)傳送網(wǎng)技術(shù)

2013-10-11 13:34:59

NFC現(xiàn)狀趨勢

2018-06-04 10:38:41

5G通信網(wǎng)絡(luò)3GPP

2012-04-27 14:23:08

開放平臺

2021-06-17 10:44:08

混合云云計(jì)算私有云

2020-10-23 21:11:40

技術(shù)科技人工智能

2022-02-21 18:45:31

自動(dòng)駕駛智能技術(shù)

2009-02-17 18:17:42

2014-02-09 09:49:32

2020-04-24 11:42:23

爬蟲BOT惡意爬蟲

2018-03-06 13:48:59

2016-10-17 14:35:37

大數(shù)據(jù)產(chǎn)業(yè)數(shù)據(jù)數(shù)據(jù)發(fā)展

2010-04-26 15:27:07

互聯(lián)網(wǎng)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號