为什么 Java 在 25 年之后依旧如此年轻:一个架构师的看法
導(dǎo)讀:下個(gè)月就要過(guò)26歲生日的Java,依然與開發(fā)者保持著緊密的聯(lián)系;現(xiàn)在,全球開發(fā)者社區(qū)中仍有 69% 的人使用 Java 編寫代碼。
Oracle 最近發(fā)布了 Java 15,其中包含了大量的特性,比如密閉類,隱藏類,Edward-Curve 數(shù)字簽名算法(EdDSA),文本塊等等。這使得 Java 15 成為一門 25 歲的“年輕”編程語(yǔ)言,而不是一門 25 歲的“年邁”編程語(yǔ)言。
作者:Dr.Magesh Kasthuri
譯者:keepmovingljzy
來(lái)源:掘金開發(fā)者社區(qū)(ID:juejin_im)
01 Java 的歷史和演變
在 1990 年代初期,有數(shù)十種非常穩(wěn)定的編程語(yǔ)言,像 FORTRAN, COBOL, Pascal, C++, and Visual Basic,許多平臺(tái)像 Windows, Mac, Unix, Linux 和移動(dòng)端平臺(tái)需要一種在程序開發(fā)和架構(gòu)設(shè)計(jì)中統(tǒng)一的方法。
James Gosling 和他的朋友在他的辦公室附近的一顆橡樹(Oak)下討論了這些方面的問(wèn)題,他們覺得應(yīng)該開發(fā)一種新的編程語(yǔ)言來(lái)解決這些差異。在開發(fā)一種名為 Oak 的新語(yǔ)言時(shí),他們?cè)诨A(chǔ)方面非常挑剔,這個(gè)語(yǔ)言當(dāng)時(shí)被命名為 Green(因?yàn)檫@個(gè)團(tuán)隊(duì)名字叫 Green),后來(lái)又被命名為 Java (基于他們最喜歡印尼咖啡叫做 Java 咖啡)。
James Gosling 在 1995 年引入了 Java,在那期間還有其他的語(yǔ)言 C,C++,VC++,Visual Basic, Python 都有自己的市場(chǎng)和開發(fā)人員,部署。Java 提出了 WORA(一次編寫,到處運(yùn)行)的概念, 簡(jiǎn)單性,面向?qū)ο缶幊?#xff0c;并消除了 C++ 的所有痛點(diǎn)。最重要的是帶有 Applet 支持的 Web 編程以及 Enrich UI 設(shè)計(jì)(抽象窗口工具包)。
由于其簡(jiǎn)單性,它吸引了更多的開發(fā)人員,并在 1998-2001 年間成為所有開發(fā)人員在國(guó)際公司(美國(guó),英國(guó))工作的“通行證”。但是同時(shí)在 2001 期間 Dotcom 減少了大量工作崗位,為 Java 增加新的開發(fā)人員。
然而,在后面的階段,在 RMI 之上使用 JSP、Servlet 和中間層體系架構(gòu) EJB,在 Web 編程中引入更多的特性,會(huì)給 JAVA 的企業(yè)應(yīng)用空間帶來(lái)更多的思考。為了進(jìn)入移動(dòng)應(yīng)用領(lǐng)域,Java 還引入了移動(dòng)編程,從而引入了J2ME。由此,Java 提出了 J2SE,J2ME 和 J2EE。
但是他們都使用 CORE-JAVA 作為基礎(chǔ)語(yǔ)言。Java 也和 IBM 合作開發(fā)了 Java Sound Library;Java Media Framework 與 Java 運(yùn)行時(shí)結(jié)合在一起,未來(lái)通過(guò) IBM 使用 Voice 進(jìn)行語(yǔ)音合成對(duì)于媒體和教育領(lǐng)域的人們來(lái)說(shuō)是另一個(gè)了不起的里程碑。
隨著時(shí)間的推移,Java 增加了開發(fā)人員的數(shù)量,同時(shí)引入了 JUG。Java Bug 追蹤和 Bug 報(bào)告都做的很好。
由于其簡(jiǎn)單而強(qiáng)大,更多的部署,隨后幾年的增長(zhǎng)是顯著的,并且將市場(chǎng)上的 C++, VC++, Visual Basic 淘汰了,在開發(fā)者社區(qū)中領(lǐng)先了 5-6 年,它甚至將 Python 語(yǔ)言擱置一旁,并帶了了諸如 JavaScript Web 編程(在 CSS+HTML 之上的動(dòng)態(tài)支持)之類的功能。
Java 具有大量的變種功能,并且可以與新引入的 GO,RUBY,SCALA 等競(jìng)爭(zhēng),并且也能占領(lǐng)自己的市場(chǎng)。
02 Java 基石
Green 團(tuán)隊(duì)在 Java 編程語(yǔ)言的初始化概念過(guò)程中規(guī)劃的基本面使得 Java 編程語(yǔ)言的基本模塊是:
構(gòu)建一種簡(jiǎn)單的,面向?qū)ο蟮恼Z(yǔ)言,這對(duì)于 C++ 程序員來(lái)說(shuō)很容易。
平臺(tái)無(wú)關(guān)并且架構(gòu)無(wú)關(guān)。
高性能與許多內(nèi)存特性以及通過(guò)命令行參數(shù)進(jìn)行性能調(diào)優(yōu)。
多線程,動(dòng)態(tài),解釋執(zhí)行。
安全性和強(qiáng)大的功能。
▲圖:Java 的歷史和發(fā)展時(shí)間軸
https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/a8d45a3385db48cb85a9c964d087bb43~tplv-k3u1fbpfcp-watermark.image
有了這些正確且強(qiáng)大的基本塊,Java 在采用現(xiàn)代編程語(yǔ)言中的新變化時(shí),比如 Lambda 表達(dá)式,Switch 表達(dá)式和密閉類等仍然沒有做任何妥協(xié)。因此許多新的編程框架,包括 Hadoop 和許多大數(shù)據(jù)框架,云功能將 Java 用作原生工具。這就是為什么在 25 年后,Java 仍然在與 Scala,Go 和 Python 等新時(shí)代的編程語(yǔ)言斗爭(zhēng)。
03 從 Sun 到 Oracle 公司的轉(zhuǎn)型
Sun 公司已被 Oracle 收購(gòu),因此他們從 2010 年開始接管 Java。Oracle 已經(jīng)將 Java 的版本控制從 1-2 年提高到 6 個(gè)月一次。這導(dǎo)致了巨大的變化和新功能的增加。Java 8 是吸引開發(fā)者并重新占領(lǐng)市場(chǎng)份額的非凡版本之一。即使 Oracle 公司引入了 Java 14,對(duì)于所有開發(fā)人員來(lái)說(shuō),仍舊使用著更加穩(wěn)定的 J2SE 1.8 版本來(lái)維持他們的部署。
▲圖:Java 框架的熱圖
https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/a8d45a3385db48cb85a9c964d087bb43~tplv-k3u1fbpfcp-watermark.image
在 Oracle 接管 Java 之后,人們開始考慮開源的思想過(guò)程,并從太陽(yáng)公司的 J2SE(OpenJDK)和 Oracle 公司的 J2EE JAKARTA Eclipse community foundation 項(xiàng)目的名義開始支持 J2EE 開放。
Java 已在所有領(lǐng)域廣泛使用,無(wú)論是制造業(yè),零售業(yè),銀行業(yè)還是電信業(yè),Java 語(yǔ)言都是必不可少的,每個(gè)開發(fā)人員都應(yīng)了解 Java。因此,它在全球范圍內(nèi)的行業(yè)中創(chuàng)造了更多的機(jī)會(huì)。在 2006-2013 年期間,Oracle 公司遇到了困難。
但是,在 Oracle 接管Java之后,這種速度或開發(fā)/部署已被徹底消除。Sun Microsystems 召開了Java ONE 會(huì)議,每次發(fā)布都會(huì)進(jìn)行全球性的技術(shù)討論,有關(guān) Java 的整個(gè)新生事物(新功能,未來(lái)的 JSR)將與更多的技術(shù)受眾進(jìn)行討論和辯論。
正如我們所討論的,Java 在微控制器和微空間項(xiàng)目中也有一席之地。Java 帶來(lái)的重點(diǎn)和轉(zhuǎn)變之一是 Java 嵌入式系統(tǒng)特性,該特性處理使用網(wǎng)絡(luò)遠(yuǎn)程管理裝置和設(shè)備。我覺得這是最近幾天引入物聯(lián)網(wǎng)(IoT)的基礎(chǔ),但早在 2006-2010 年的時(shí)候,Java就已經(jīng)考慮過(guò)了。
Oracle 帶來(lái)的第一個(gè)重大變化是以兩種形式發(fā)布 Java:
Java 的開發(fā)平臺(tái)稱為 OpenJDK。
企業(yè)使用的商業(yè)平臺(tái)稱為 Oracle Java。
04 基于 Java 平臺(tái)的框架
作為 Java 的簡(jiǎn)介,您可以自由地在世界上看到更多語(yǔ)言,例如 GO,Python,Ruby,PERL 等,以及它們的市場(chǎng)空間。Java 已用于客戶端層或兩層應(yīng)用程序(Applet,JavaScript),服務(wù)器層(JSP,Servlet),中間層(EJB)和 N層(EMAIL,JNDI,JDBC 等)。
它還可以幫助 Sun 公司和 Oracle 在 Java 增長(zhǎng)期間增加他們的開發(fā)人員和貢獻(xiàn)者。Java 已在 Spring,Hibernate 等第三方框架中大量使用,并啟用了跨數(shù)據(jù)庫(kù)和動(dòng)態(tài)/運(yùn)行時(shí)依賴項(xiàng)注入功能。
除此之外,隨著下一代編程語(yǔ)言的轉(zhuǎn)變,單體世界也轉(zhuǎn)變?yōu)槲⒎?wù)世界,為商業(yè)和市場(chǎng)帶來(lái)更多的穩(wěn)定性、可伸縮性和敏捷性。Java 在所有基于 SpringBoot 的微服務(wù)容器中都得到了使用,并再次獲得了一組頂級(jí)程序員、經(jīng)過(guò)驗(yàn)證的部署,等等。
我忘了提到另一個(gè)特性,即所謂的多語(yǔ)言支持,其中 Java 支持 UNICODE 以支持跨語(yǔ)言(國(guó)際)支持。Java 在大數(shù)據(jù)、aim 領(lǐng)域的應(yīng)用非常廣泛,有更多的用例、解決方案和部署。Java 也將其轉(zhuǎn)變指向基于云的平臺(tái)部署,因此,通過(guò)滿足熱門市場(chǎng)需求,也使得更多的開發(fā)人員能夠在 Java 中貢獻(xiàn)和工作。
Java 被廣泛應(yīng)用和集成到各個(gè)領(lǐng)域、技術(shù)、工具集,提高了 Java 的利用率,從空間、衛(wèi)星研究到制造、教育、銀行、金融、移動(dòng)、云等。Java 已經(jīng)成功的與以下第三方工具和技術(shù)集成。Java 對(duì) AI、ML、Cloud 等進(jìn)行了更廣泛的集成,在性能上得到了穩(wěn)定、持續(xù)的提升。
25 年來(lái),Java 一直被 Python、C++、Scala、GO、Erlang 等各種語(yǔ)言所忽視。盡管如此,Java仍然是第一名,它擁有更多的社區(qū)成員和穩(wěn)定的部署以及大量的用例。
Java 與其他第三方框架的集成,從 Hibernate 到 Struts,直到現(xiàn)在,SpringBoot 微服務(wù)框架也被全球采用和部署。與響應(yīng)式編程語(yǔ)言相比,響應(yīng)式 Java 變得更加流行,并提供了更多的選項(xiàng)。
這些集成將 Java 帶到了編程領(lǐng)域的下一個(gè)層次,性能和穩(wěn)定性是 Java 成功特性的關(guān)鍵部分。Oracle 公司也在他們的版本中宣布了很多新的變化;不再是每?jī)赡臧l(fā)布一次 Java,而是每 6 個(gè)月發(fā)布一次。
此外,還添加了一個(gè)新網(wǎng)站來(lái)查看即將到來(lái)的項(xiàng)目或到目前為止完成的任務(wù)的特性。伴隨著 25 年 Java 歷程的成功里程碑,還有一些重要的里程碑,比如 JDK8 獲得了巨大的部署量等等。就這個(gè)特性而言,開發(fā)人員可能希望 JVM 能有更快的速度和性能改進(jìn),以及容錯(cuò)能力,以處理大量的并發(fā)用例。
05 Java 平臺(tái)最近面臨的困境
當(dāng) Sun 擁有 Java 時(shí),還有其他 Java 運(yùn)行時(shí)環(huán)境,Java 中的增強(qiáng)已經(jīng)完成,特別是 IBM 引入了 IBM Java(它也有一些有趣的特性)。
突然之間,Sun 公司公司對(duì)微軟提起訴訟,稱微軟壟斷 IE 瀏覽器,并使用 JRE 來(lái)反對(duì) Sun 公司的許可要求。Sun 已經(jīng)贏得了與微軟的官司,最近 Oracle 也推出了谷歌套件,在他們的移動(dòng) android 平臺(tái)上使用Java。
06 快速查看最新的 Java 15 版本
Oracle Java 版本基于 JDK 企業(yè)提案(JEP)和 Java 規(guī)范請(qǐng)求(JSR),而 EdDSA 是 JEP 339 的一種實(shí)現(xiàn)。它是采用約 126 位加密算法的獨(dú)立于平臺(tái)的加密簽名。這可以用于具有更高安全性的數(shù)據(jù)傳輸處理,以傳輸加密的數(shù)據(jù)。Java 15 中引入的密閉類是 JEP 360 的實(shí)現(xiàn),它限制了哪些類可以擴(kuò)展或?qū)崿F(xiàn)密閉類。例如:
public?abstract?sealed?class?Shape??????permits?Circle,?Rectangle,?Square?{...}使 Shape 成為密閉類,并且僅允許“permits”類實(shí)現(xiàn)/擴(kuò)展。這樣可以安全地訪問(wèn)類層次結(jié)構(gòu),并控制接口的可重用性。隱藏類基于 JEP 371 的實(shí)現(xiàn),它通過(guò)允許在運(yùn)行時(shí)使用反射 API 生成類來(lái)限制類的使用,并使該類對(duì)外部環(huán)境不可發(fā)現(xiàn)。因此,無(wú)法通過(guò)動(dòng)態(tài)代理生成隱藏類,并且可以安全地訪問(wèn)它們。
ZGC 或 Z 垃圾收集器是基于 JEP 377 的。在 Java 1.8 的早期版本中,G1 GC 是自我管理垃圾收集的突破,并極大地提高了性能。后來(lái)在 Java 11中,ZGC 引入了各種性能改進(jìn)特性,現(xiàn)在在 Java 15 中,它得到了進(jìn)一步的改進(jìn),如取消提交未使用的內(nèi)存、多線程堆、并發(fā)的類卸載等等。
JEP 378 引入的文本塊特性可以創(chuàng)建以自動(dòng)化轉(zhuǎn)義序列格式存儲(chǔ)的多行字符串字面量,并以一種可預(yù)測(cè)的方式格式化字符串,同時(shí)改進(jìn)了字符串字面量的內(nèi)存使用情況。這樣可以有效地在 Java 代碼中將 XML,JSON 和 HTML 代碼段作為字符串字面量進(jìn)行存儲(chǔ)。
外部?jī)?nèi)存訪問(wèn) API 是一個(gè) JEP 383 實(shí)現(xiàn),它允許程序有效地訪問(wèn)已分配的 Java堆之外的外部?jī)?nèi)存。它最初是作為一個(gè)預(yù)覽版本在Java 14中引入的,現(xiàn)在改進(jìn)的版本作為 Java 15 的一部分發(fā)布了。這個(gè) API 允許通過(guò)添加一段像MemorySegment.allocateNative(100)這樣的代碼來(lái)快速分配本機(jī)內(nèi)存段。
推薦閱讀????
1
Java核心技術(shù)(原書第11版)
作者:凱·S.霍斯特曼
推薦語(yǔ):《Java核心技術(shù)》,獲Jolt大獎(jiǎng)圖書,第11版針對(duì)Java SE 9、10、11全面更新,補(bǔ)充了Java新版本的新特性,用更清晰明了的示例加以解釋。卷I:主要介紹Java語(yǔ)言的基礎(chǔ)知識(shí)的專業(yè)級(jí)詳解;卷II:主要介紹軟件開發(fā)需要了解的高級(jí)主題。完整講解Java開發(fā)者學(xué)習(xí)路線。本書適合全體初-中級(jí)Java編程人員閱讀。
2
Effective Java中文版(原書第3版)
作者:約書亞·布洛克(Joshua Bloch)
推薦語(yǔ):“我很希望我10年前就能擁有這本書。有人可能認(rèn)為我不需要任何Java方面的書籍,但是我需要這本書。”
——Java之父James Gosling
你是否正在尋找一本能夠更加深入地了解Java編程語(yǔ)言的書,以便編寫出更清晰、更正確、更健壯且更易于重用的代碼?本書再適合不過(guò)了!這是一本分享經(jīng)驗(yàn)并指引你少走彎路的經(jīng)典著作,針對(duì)如何編寫高效、設(shè)計(jì)優(yōu)良的程序提出了最實(shí)用、最權(quán)威的指導(dǎo)方針,通過(guò)90條經(jīng)驗(yàn)法則,探索新的設(shè)計(jì)模式和語(yǔ)言習(xí)慣用法,幫你更加有效地使用Java編程語(yǔ)言及其基本類庫(kù)。適合已經(jīng)掌握J(rèn)ava核心技術(shù)的程序員,想更加深入地了解Java編程語(yǔ)言的開發(fā)者閱讀。
3
Java編程思想(第4版)
作者:Bruce Eckel
推薦語(yǔ):Java學(xué)習(xí)必讀經(jīng)典、殿堂級(jí)著作!《Java編程思想》贏得了全球程序員的廣泛贊譽(yù),即使是晦澀的概念,在BruceEckel的文字親和力和小而直接的編程示例面前也會(huì)化解于無(wú)形。從Java的基礎(chǔ)語(yǔ)法到高級(jí)特性(深入的面向?qū)ο蟾拍睢⒍嗑€程、自動(dòng)項(xiàng)目構(gòu)建、單元測(cè)試和調(diào)試等),本書都能逐步指導(dǎo)你輕松掌握。
4
Java并發(fā)編程實(shí)戰(zhàn)
作者:Brian Goetz 等
推薦語(yǔ):Java并發(fā)編程里程碑著作!10年暢銷100000+冊(cè)。從并發(fā)編程的基本理論入手,逐步介紹了在設(shè)計(jì)Java并發(fā)程序時(shí)各種重要的設(shè)計(jì)原則、設(shè)計(jì)模式以及思維模式,使得開發(fā)人員能夠更快地領(lǐng)悟Java并發(fā)編程的要領(lǐng),快速地構(gòu)建大規(guī)模的并發(fā)應(yīng)用程序。
5
深入理解Java虛擬機(jī)
JVM高級(jí)特性與最佳實(shí)踐(第3版)
作者:周志明
推薦語(yǔ):大廠面試通關(guān)寶典全新升級(jí)!第三版大幅更新50%以上內(nèi)容,周志明從Java技術(shù)體系、自動(dòng)內(nèi)存管理、虛擬機(jī)執(zhí)行子系統(tǒng)、程序編譯與代碼優(yōu)化、高效并發(fā)5個(gè)維度全面剖析虛擬機(jī)。以實(shí)戰(zhàn)為導(dǎo)向,通過(guò)大量實(shí)際案例,分享解決各種Java技術(shù)難題的方案和技巧。幾乎涵蓋大廠面試全部知識(shí)點(diǎn)。值得所有Java技術(shù)人員一讀再讀。
6
Java虛擬機(jī)規(guī)范(Java SE 8版)
作者:蒂姆·林霍爾姆?弗蘭克·耶林 等
推薦語(yǔ):基于Java SE 8, Oracle官方發(fā)布,Java虛擬機(jī)技術(shù)創(chuàng)建團(tuán)隊(duì)成員撰寫,國(guó)內(nèi)Java技術(shù)專家翻譯,闡釋Java虛擬機(jī)與Java的關(guān)系和發(fā)展歷程,是深度了解Java虛擬機(jī)和Java語(yǔ)言實(shí)現(xiàn)細(xì)節(jié)的必讀之作。
7
深入解析Java虛擬機(jī)HotSpot
作者:楊易
推薦語(yǔ):很多JVM的底層技術(shù)細(xì)節(jié)你是否只了解表面?面對(duì)JVM Crash或性能調(diào)優(yōu)方面的問(wèn)題時(shí)你是否會(huì)束手無(wú)策?面對(duì)上層Java應(yīng)用發(fā)生的偏離預(yù)期的行為是否會(huì)不知所措?……
這本書以源碼分析為基礎(chǔ),從運(yùn)行時(shí)、垃圾回收器、即時(shí)編譯器3個(gè)維度全面、深入解析HotSpot VM的底層實(shí)現(xiàn)和工作機(jī)制,同時(shí)與上層的Java語(yǔ)言和庫(kù)結(jié)合,指導(dǎo)讀者解決JVM開發(fā)、JVM調(diào)優(yōu)和JVM排錯(cuò)方面遇到的各種問(wèn)題。
干貨直達(dá)????
多圖詳解數(shù)據(jù)中臺(tái)建設(shè)框架(建議收藏)
中國(guó)人工智能最高獎(jiǎng),頒給了這些人
什么是架構(gòu)?網(wǎng)絡(luò)架構(gòu)中都有什么?終于有人講明白了
大數(shù)據(jù)平臺(tái)的3個(gè)核心功能
更多精彩????
在公眾號(hào)對(duì)話框輸入以下關(guān)鍵詞
查看更多優(yōu)質(zhì)內(nèi)容!
PPT?|?讀書?|?書單?|?硬核?|?干貨?|?講明白?|?神操作
大數(shù)據(jù)?|?云計(jì)算?|?數(shù)據(jù)庫(kù)?|?Python?|?爬蟲?|?可視化
AI?|?人工智能?|?機(jī)器學(xué)習(xí)?|?深度學(xué)習(xí)?|?NLP
5G?|?中臺(tái)?|?用戶畫像?|?1024?|?數(shù)學(xué)?|?算法?|?數(shù)字孿生
據(jù)統(tǒng)計(jì),99%的大咖都關(guān)注了這個(gè)公眾號(hào)
????
總結(jié)
以上是生活随笔為你收集整理的为什么 Java 在 25 年之后依旧如此年轻:一个架构师的看法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 史上最贵黑客事件!中本聪用代码亲手杀死
- 下一篇: “新基建”横空出世,9本书助你把握7+2