當(dāng)前位置:首頁 > 充電吧 > 充電吧
[導(dǎo)讀]22 歲,對(duì)于一個(gè)技術(shù)人來說可謂正當(dāng)壯年。但對(duì)于一門編程語言來說,情況可能又有不同。各類編程語言橫空出世,紛戰(zhàn)不休,然而 TIOBE 的語言排行榜上,Java 卻露出了明顯的頹勢。這個(gè)老牌的語言,未來會(huì)是怎樣?

22 歲,對(duì)于一個(gè)技術(shù)人來說可謂正當(dāng)壯年。但對(duì)于一門編程語言來說,情況可能又有不同。各類編程語言橫空出世,紛戰(zhàn)不休,然而 TIOBE 的語言排行榜上,Java 卻露出了明顯的頹勢。這個(gè)老牌的語言,未來會(huì)是怎樣?

1

寫在前面

從 1995 年第一個(gè)版本發(fā)布到現(xiàn)在,Java 語言已經(jīng)在跌宕起伏中走過了 22 年,最新的 Java 版本也已經(jīng)迭代到 Java 9。當(dāng)年 Java 語言的跨平臺(tái)優(yōu)勢如今看來也只不過是家常小菜,Go、Rust 等語言橫空出世,進(jìn)一步拓寬了編程語言的邊界。當(dāng)年發(fā)明 Java 語言的 Sun 公司早已被 Oracle 收購,Oracle 現(xiàn)在也正處于水深火熱的云計(jì)算浪潮當(dāng)中,甚至連 Java 之父 James Gosling 也加入了當(dāng)今世界最大的云計(jì)算公司 AWS。

Java 語言發(fā)展的這 20 年也正是全球互聯(lián)網(wǎng)迅猛發(fā)展的 20 年,Java 語言同時(shí)也見證了電商浪潮、移動(dòng)互聯(lián)網(wǎng)浪潮、大數(shù)據(jù)浪潮、云計(jì)算浪潮,所以在現(xiàn)今各大互聯(lián)網(wǎng)公司身上都能看到 Java 的身影。

縱看 Java 語言的發(fā)展,不禁讓人聯(lián)想到辛棄疾的一首詞:

千古江山,英雄無覓,孫仲謀處。舞榭歌臺(tái),風(fēng)流總被雨打風(fēng)吹去。斜陽草樹,尋常巷陌,人道寄奴曾住。想當(dāng)年,金戈鐵馬,氣吞萬里如虎。元嘉草草,封狼居胥,贏得倉皇北顧。四十三年,望中猶記,烽火揚(yáng)州路。可堪回首,佛貍祠下,一片神雅社鼓。憑誰問,廉頗老矣,尚能飯否?

TIOBE 的語言排行榜顯示,自 2016 年初 Java 語言就出現(xiàn)了明顯的下頹趨勢,開發(fā)者社區(qū)也出現(xiàn)了一些唱衰 Java 語言的論調(diào),編者心中也有些許疑問:Java 老矣,尚能『飯』否?基于這樣的背景,InfoQ 邀請(qǐng)到了 Java 資深專家張建鋒來為大家解讀 Java 語言的發(fā)展現(xiàn)狀以及未來。

2

Java 語言的發(fā)展回顧

Java 語言源于 1991 年 Sun 公司 James Gosling 領(lǐng)導(dǎo)的的 Ork 項(xiàng)目,1995 年 Sun 公司正式起名為 Java,并提出“Write once, Run anywhere"的口號(hào)。

1996 年 1 月 Java 1.0 發(fā)布,提供了一個(gè)解釋執(zhí)行的 Java 虛擬機(jī),其時(shí)恰逢互聯(lián)網(wǎng)開始興起,Java 的 Applet 能在 Mozilla 瀏覽器中運(yùn)行,被看作是未來的互聯(lián)網(wǎng)語言。

1997 年 2 月 Java 1.1 發(fā)布,Java 語言的基本形態(tài)基本確定了,比如反射 (reflection), JavaBean, 接口和類的關(guān)系等等,一直到今天都保持一致。然而,Java 最初的一些目標(biāo),如在瀏覽器中執(zhí)行 Applet,以及跨平臺(tái)的圖形界面 Awt 很快遭遇到負(fù)面的評(píng)價(jià)。

1998 年 12 月,Java 第一個(gè)里程碑式的版本,即 Java 1.2 發(fā)布了。這個(gè)版本使用了 JIT(Just in time)編譯器技術(shù),使得語言的可遷移性和執(zhí)行效率達(dá)到最優(yōu)的平衡,同時(shí) Collections 集合類設(shè)計(jì)優(yōu)良,在企業(yè)應(yīng)用開發(fā)中迅速得到了廣泛使用。Sun 公司把 Java 技術(shù)體系分成三個(gè)方向,分別是 J2SE(面向桌面和通用應(yīng)用開發(fā)),J2EE(面向企業(yè)級(jí)應(yīng)用開發(fā)),J2ME(面向移動(dòng)終端開發(fā))。這個(gè)分類影響非常久遠(yuǎn),體現(xiàn)出主流語言設(shè)計(jì)者的思想:針對(duì)于不同的應(yīng)用領(lǐng)域,在形態(tài),API 集合等進(jìn)行劃分。

2000 年 5 月,Java 1.3 發(fā)布,這個(gè)版本中 Corba 作為語言級(jí)別的分布式對(duì)象技術(shù),成為 J2EE 的一個(gè)技術(shù)前提。J2EE 受到 Corba 的設(shè)計(jì)的影響較大,早期 EJB 的 Home,接口和實(shí)現(xiàn)就是 Corba 在 C 語言的實(shí)現(xiàn),被移植到 Java 語言之中。J2EE 中的 Servlet 規(guī)范獲得了極大的成功,伴隨著互聯(lián)網(wǎng)的興起,和瀏覽器直接通過 HTTP 協(xié)議交互的 Servlet,和眾多的 MVC 框架,成為 Web1.0 的網(wǎng)紅。

2002 年 2 月,Java 1.4 發(fā)布,Java 語言真正走向成熟,提供了非常完備的語言特性,如 NIO,正則表達(dá)式,XML 處理器等。同年微軟的.NET 框架發(fā)布,兩者開始了為期十幾年的暗自競爭。從語言特性上來說,.NET 后發(fā)先至,一直處于優(yōu)勢。但 Java 依賴良好的開發(fā)者生態(tài),絕大多數(shù)大型軟件公司的使用者眾多和不斷貢獻(xiàn),以及對(duì) Linux 操作系統(tǒng)良好的支持,漸漸的在服務(wù)器端獲得優(yōu)勢地位。

2004 年 9 月,Java 5 發(fā)布,Sun 不再采用 J2SE, J2EE 這種命名方式,而使用 Java SE 5, Java EE 5 這樣的名稱。我認(rèn)為 Java 5 是第二個(gè)里程碑式的版本。Java 語言語法發(fā)生很大的變化,如注解 (Annotation),裝箱 (Autoboxing),泛型 (Generic),枚舉 (Enum),foreach 等被加入,提供了 java.util.concurrent 并發(fā)包。Java 5 對(duì)于 Java 語言的推動(dòng)是巨大的,特別是注解的加入,使得語言定義靈活了很多,程序員可以寫出更加符合領(lǐng)域定義的描述性程序。

2006 年 5 月, JavaEE 5 發(fā)布,其中最主要是 EJB3.0 的版本升級(jí)。在此之前,EJB2.X 版本被廣泛質(zhì)疑,SpringFramework 創(chuàng)建者 Rod Johnson 在經(jīng)典書籍“J2EE Development without EJB“中,對(duì) EJB2 代表的分布式對(duì)象的設(shè)計(jì)方法予以批駁。EJB3 則重新經(jīng)過改造,使用注解方式,經(jīng)過應(yīng)用服務(wù)器對(duì) POJO 對(duì)象進(jìn)行增強(qiáng)來實(shí)現(xiàn)分布式服務(wù)能力。在某種程度,可以說 EJB3 挽救了 JavaEE 的過早消亡。

2006 年 12 月,Java 6 發(fā)布,這個(gè)語言語法改進(jìn)不多,但在虛擬機(jī)內(nèi)部做了大量的改進(jìn),成為一個(gè)相當(dāng)成熟穩(wěn)定的版本,時(shí)至今日國內(nèi)的很多公司依然以 Java6 作為主要 Java 開發(fā)版本來使用。同年 Sun 公司做出一個(gè)偉大的決定,將 Java 開源。OpenJDK 從 Sun JDK 1.7 版本分支出去,成為今天 OpenJDK 的基礎(chǔ)。OpenJDK6 則由 OpenJDK7 裁剪而來,目前由紅帽負(fù)責(zé)維護(hù),來滿足 Redhat Enterprise Linux 6.X 用戶的需要。

2009 年 12 月,JavaEE 6 發(fā)布,這個(gè)版本應(yīng)該說是 JavaEE 到目前為止改進(jìn)最大影響最深遠(yuǎn)的一個(gè)版本。因?yàn)?JavaEE5 只有 EJB3 適應(yīng)了 Java 注解語法的加入,而 EE6 全面接納了注解。CDI 和 BeanValidation 規(guī)范的加入,在 POJO 之上可以定義完備的語義,由容器來決定如何去做。Servlet 也升級(jí)到 3.0 版本,并在接口上加入異步支持,使得系統(tǒng)整體效率可以大幅提高。EE 劃分為 Full Profile 和 Web Profile,用戶可以根據(jù)自己的需要選擇不同的功能集。

在此之前,Oracle 已經(jīng)以 74 億美金的價(jià)格收購了 Sun 公司,獲得了 Java 商標(biāo)和 Java 主導(dǎo)權(quán)。也收購了 BEA 公司,獲得市場份額最大的應(yīng)用服務(wù)器 Webogic。JavaEE 6 雖然是收購之后發(fā)布的版本,但主要的設(shè)計(jì)工作仍然由原 Sun 公司的 Java 專家完成。

2011 年 7 月,Oracle 發(fā)布 Java 7, 其中主要的特性是 NIO2 和 Fork/Join 并發(fā)包,盡管語言上沒有大的增強(qiáng),但我個(gè)人認(rèn)為,自從 Oracle JDK(包括 OpenJDK7),Java 虛擬機(jī)的穩(wěn)定性真正做到的工業(yè)級(jí),成為一個(gè)計(jì)算平臺(tái)而服務(wù)于全世界。

2013 年 6 月,Oracle 發(fā)布 JavaEE 7,這個(gè)版本加入了 Websocket,Batch 的支持,并且引入 Concurrency 來對(duì)服務(wù)器多線程進(jìn)行管控。然而所有的子規(guī)范,算上可選項(xiàng) (Optional) 總共有 40 多項(xiàng),開發(fā)者光是閱讀規(guī)范文本就很吃力了,更不要說能夠全局精通掌握。JavaEE 規(guī)范的本質(zhì)是企業(yè)級(jí)應(yīng)用設(shè)計(jì)的經(jīng)驗(yàn)?zāi)Y(jié),每一個(gè) API 都經(jīng)過眾多豐富經(jīng)驗(yàn)的專家反復(fù)商議并確定。各個(gè)版本之間可以做到向后兼容,也就是說,即使是 10 年前寫的 Servlet 程序,當(dāng)前的開發(fā)者也可以流暢的閱讀源碼,經(jīng)過部分代碼調(diào)整和配置修改,可以部署在當(dāng)今的應(yīng)用服務(wù)器上。反過來,今后用 Servlet4 寫的程序,瀏覽器和服務(wù)器通信使用全新的 HTTP/2 協(xié)議,但程序員在理解上不會(huì)有障礙,就是因?yàn)?Servlet 規(guī)范的 API 非常穩(wěn)定,基本沒有大的變化修改。

2014 年 3 月,Oracle 發(fā)布 Java 8,這個(gè)版本是我認(rèn)為的第三個(gè)有里程碑意義的 Java 版本。其中最引人注目的便是 Lambda 表達(dá)式了,從此 Java 語言原生提供了函數(shù)式編程能力。語言方面大的特性增加還有:Streams,Date/Time API, 新的 Javascript 引擎 Nashorn,集合的并行計(jì)算支持等,Java8 更加適應(yīng)海量云計(jì)算的需要。

按照原來的計(jì)劃,Java9 應(yīng)該在今年 7 月發(fā)布,但因?yàn)槟K化 (JPMS) 投票未通過的原因,推遲到今年 9 月份發(fā)布。

JavaEE 8 也會(huì)在今年發(fā)布,預(yù)計(jì)的時(shí)間在 8-10 月。其中最主要更新是 Servlet 4.0 和 CDI 2.0,后者已經(jīng)完成最終規(guī)范的發(fā)布和投票。

3

Java 社區(qū)情況介紹

我們按照兩個(gè)方面介紹 Java 社區(qū)情況。

Java User Group(JUG,Java 用戶組) 目前全世界范圍有 100 多個(gè) JUG 組織,分布在各個(gè)大洲各個(gè)國家,一般來說以地域命名。目前最有影響力的兩個(gè) JUG 分別是倫敦的 LJC(London Java Community) 和巴西的 SouJava,目前都是 JCP 的 EC(執(zhí)行委員會(huì)) 成員。國內(nèi)目前有 GreenTea JUG(北京和杭州),Shanghai JUG,GuangDong JUG, Shenzhen JUG, Nanjing JUG 等。GreanTeaJUG 以阿里巴巴研發(fā)部門成員為核心,包括北京和杭州兩地各個(gè)公司從事 Java 開發(fā)的研發(fā)人員,過去幾年成功舉辦了很多有業(yè)界影響力的活動(dòng),特別是邀請(qǐng)到眾多國外的 Java 技術(shù)專家來分享知識(shí),目前是國內(nèi)最大的 JUG 開發(fā)者組織。

Java 開源社區(qū) Java 是一門開放的語言,其開源社區(qū)也是參與者眾多。最有名的應(yīng)當(dāng)數(shù) Apache 社區(qū),目前已經(jīng)擁有近 200 個(gè)頂級(jí)項(xiàng)目,其中絕大多數(shù)是 Java 語言項(xiàng)目。在 Java 生態(tài)圈中,具有重要地位的如 Ant、Commons、Tomcat、Xerces、Maven、 Struts、Lucene、ActiveMQ、CXF、Camel、Hadoop 等等。很多技術(shù)時(shí)代,一大批 Java 項(xiàng)目加入,如 Web 時(shí)代的 Velocity、Wicket;JavaEE 相關(guān)的 Tomee、OpenJPA、OpenWebBeans、Myfaces;WebService 時(shí)代的 jUDDI、Axis、ServiceMix;Osgi 時(shí)期的 Flex、Karaf;大數(shù)據(jù)時(shí)代的 HBase、Hive、ZooKeeper、Cassandra;云時(shí)代的 Mesos、CloudStack 等等。

涉及到軟件開發(fā)的方方面面,可以說當(dāng)今幾乎所有的中型以上 Java 應(yīng)用中,都會(huì)有 Apache 開源項(xiàng)目的身影。國內(nèi)最早參與 Apache 社區(qū)的以國外軟件公司國內(nèi)研發(fā)團(tuán)隊(duì)成員為主,如紅帽、IONA、Intel、IBM 研發(fā)中心等。如今國內(nèi)互聯(lián)網(wǎng)公司和軟件公司也不斷的參與,特別是開始主導(dǎo)一些 Apache 項(xiàng)目,如 Kylin 等。

JBoss 開源社區(qū),包含了 50 多個(gè) Java 開源項(xiàng)目,其中有 Hibernate、Drools、jBPM 等業(yè)界知名開源項(xiàng)目,也有 Undertow、Byteman、Narayana 等名氣不算大,但絕對(duì)是相應(yīng)領(lǐng)域業(yè)界的頂級(jí)優(yōu)秀項(xiàng)目。當(dāng)前 JBoss 開源社區(qū)主要以企業(yè)應(yīng)用中間件軟件為主,RedHat 是主要的技術(shù)貢獻(xiàn)力量。

Eclipse 開源社區(qū),之前主要是包含 Eclipse IDE 的項(xiàng)目,后來也逐步進(jìn)行多方面的擴(kuò)展,比如 OSGi,服務(wù)器等,目前一些知名 Java 項(xiàng)目,如 Jetty、Vertx 等都是 Eclipse 開源組織成員。此外 IOT 目前是 Eclispe 的一個(gè)重點(diǎn)方向,在這里可以找到完整的 IOT Java 開發(fā)方案。

Spring 開源社區(qū),以 SpringFramework 為核心,包括 SpringBoot、SpringCloud、SpringSecurity、SpringXD 等開源項(xiàng)目,在國內(nèi)有廣泛的應(yīng)用場景。

4

目前大的玩家

Java 語言和品牌都是 Oracle 公司所有,所以 Oracle 公司是 Java 最主要的廠商。絕大多數(shù) JSR(Java 規(guī)范提案) 的領(lǐng)導(dǎo)者都是 Oracle 的雇員。

Java 是一個(gè)龐大的生態(tài)圈,全世界的軟件和互聯(lián)網(wǎng)公司絕大多數(shù)都是 Java 用戶,同時(shí)也可以參與推動(dòng) Java 語言的發(fā)展。任何組織或者個(gè)人都可以加入 JCP(Java Community Process),并提交 JSR 來給 JavaSE,JavaEE,JavaME 等提交新的 API 或者服務(wù)定義。Java 擁有當(dāng)今最完備的語言生態(tài),幾乎所有能想到的應(yīng)用范圍,都有軟件廠商提出過標(biāo)準(zhǔn)化的構(gòu)想,其中很多已經(jīng)被接納為 JSR 提案。如今 JSR 總數(shù)已經(jīng)都 400 多個(gè)。

JCP 是發(fā)展 Java 的國際組織,其中的執(zhí)行委員會(huì)(EC)以投票的形式對(duì) JSR 提案進(jìn)行表決。目前 EC 包括 16 個(gè)合約 (Ratified) 席位,6 個(gè)選舉 (Elected) 席位和 2 個(gè)合伙 (Associate) 席位,以及 Oracle 作為所有者的永久席位。非永久席位每兩年重新選舉一次,每次選舉為 24 個(gè)席位的一半,即為 12 個(gè)。

當(dāng)前 EC 委員會(huì)中,對(duì)于 Java 起到最重要作用的,無疑是 Oracle,IBM 和 Redhat 三家公司。Oracle 自然不用說;Redhat 領(lǐng)導(dǎo)著 JavaEE8 中兩項(xiàng) JSR,并且在操作系統(tǒng),Linux,虛擬化,云計(jì)算等基礎(chǔ)軟件方面是產(chǎn)品領(lǐng)導(dǎo)者;IBM 是軟硬件最大的廠商,擁有自己的 Unix 操作系統(tǒng)和 JDK 版本。這三家軟件廠商也是中間件廠商的強(qiáng)者,它們對(duì)于 Java 的影響是至關(guān)重要的。前不久投票被否決的 JSR 376(JPMS) 模塊化提案,就是 Redhat 和 IBM 先后表示要投反對(duì)票,最后才沒有通過的。

另外的幾個(gè)重要的 Java 參與方分別包括:巨型互聯(lián)網(wǎng)公司,以 Twitter 為代表;大型金融公司,以高盛,瑞信為代表;強(qiáng)大的硬件產(chǎn)商,Intel,NXP,Gemalto 等;大型系統(tǒng)方案廠商,HP, Fijitsu;當(dāng)然還有掌握先進(jìn) Java 技術(shù)的公司,如 Azul,Hazelcast,Tomitribe,Jetrains 等等。這些公司共同對(duì) Java 的發(fā)展起到關(guān)鍵作用。

5

GC 方面的進(jìn)展

JDK 中主要的 GC 分類有:

Serial,單線程進(jìn)行 GC,在它進(jìn)行垃圾收集時(shí),必須暫停其他所有的工作線程,直到它收集結(jié)束。

Parallel,相比 Serial 收集器,Parallel 最主要的優(yōu)勢在于使用多線程去完成垃圾清理工作,這樣可以充分利用多核的特性,大幅降低 GC 時(shí)間。

CMS(Concurrent Mark-Sweep),是以犧牲吞吐量為代價(jià)來獲得最短回收停頓時(shí)間的垃圾回收器。實(shí)現(xiàn) GC 線程和應(yīng)用線程并發(fā)工作,不需要暫停所有應(yīng)用線程。

G1(Garbage First Garbage Collector),G 設(shè)計(jì)初衷是為了盡量縮短處理超大堆(大于 4GB)時(shí)產(chǎn)生的停頓。相對(duì)于 CMS 的優(yōu)勢而言是內(nèi)存碎片的產(chǎn)生率大大降低。

目前在 JDK8 中以上 4 種 GC 都可以使用,而在 JDK9 中 G1 GC 會(huì)成為默認(rèn)的垃圾收集器。

在 OpenJDK 方面,Redhat 開源并貢獻(xiàn)了 Shenandoah GC。這是一種新的 Java 虛擬機(jī) GC 算法,目標(biāo)是利用現(xiàn)代多核 CPU 的優(yōu)勢,減少大堆內(nèi)存在 GC 處理時(shí)產(chǎn)生的停頓時(shí)間。在使用大內(nèi)存的應(yīng)用上使用,如>20G 堆空間。Fedora24 以后,官方源中的 OpenJDK 即帶有 Shenandoah 算法,不過 JDK9 中還不會(huì)被加入。

無停頓的高性能 GC 就是 Azul 公司的 C4(Continuously Concurrent Compacting Collector) GC 了,但只提供商業(yè)版本使用。

另外 IBM J9 中 Balanced GC,表現(xiàn)也很出色,能夠保證相對(duì)一致的暫停時(shí)間而避免破壞性的長時(shí)間停頓。Balanced GC 應(yīng)用在各類 IBM 中間件產(chǎn)品之中。

6

Java 9 目前已經(jīng)可以確認(rèn)的特性介紹

Java9 中,最受人關(guān)注的新特性就是 Jigsaw 項(xiàng)目帶來的模塊化技術(shù)特性。

Java 語言一直缺乏語言級(jí)別的模塊化能力,目前模塊化技術(shù)通過 OSGi, JBoss Modules 等項(xiàng)目,已經(jīng)在服務(wù)端程序得到了廣泛的應(yīng)用。Java 在語言級(jí)別引入模塊化能力,將極大的促進(jìn) Java 應(yīng)用程序組件化,模塊化的改變。應(yīng)用程序通過模塊化拆分,可以做到更靈活的引入,加載,移除組件,占用更少的內(nèi)存,更適合云計(jì)算時(shí)代的要求。在 JDK9 EA(預(yù)覽版)中,原有的 rt.jar 已經(jīng)被劃分為若干了 jmod,通過模塊內(nèi)的 module-info.java 文件來聲明模塊間的引用關(guān)系。

然而,模塊化改造是個(gè)漸進(jìn)而適度的過程,Java9 為了可兼容 Java8 以前應(yīng)用程序的運(yùn)行,做出很多的讓步,模塊定義嚴(yán)格性沒有那么苛刻。各個(gè)廠商也有對(duì)自己現(xiàn)有系統(tǒng)可無縫運(yùn)行在 Java9 上的商業(yè)訴求。Java 模塊化提案還得花更多的時(shí)間去討論和修改。

Java9 中的 jshell 工具實(shí)現(xiàn)了 REPL,即讀取,求值,打印,循環(huán)。這個(gè)工具可以使得開發(fā)者交互式的使用 Java,方便于系統(tǒng)管理,調(diào)試,使用??梢韵胂竦接辛?jshell 后,Java 語言更加適合初學(xué)者入門學(xué)習(xí)。

Jlink 工具和 AOT(預(yù)先編譯技術(shù))。一直以來,Java 運(yùn)行方式是把程序編譯成 class 文件,然后通過 jvm 運(yùn)行的。這種工作方式可以做到跨平臺(tái)移植,在互聯(lián)網(wǎng)時(shí)代初期,各種 Unix 繁榮和 Windows 在桌面的一統(tǒng)局面下,對(duì)于占據(jù)市場起到?jīng)Q定性作用。

然而到了今天,無論是大型互聯(lián)網(wǎng)公司還是企業(yè)內(nèi)部,x86 平臺(tái) 64 位服務(wù)器已經(jīng)成為主要的選擇。從運(yùn)行效率考慮,可以把 java 程序編譯成可執(zhí)行的二進(jìn)制文件,更加適應(yīng)云計(jì)算和容器技術(shù)發(fā)展的需要。

利用 jlink/jaotc 工具,可以把一個(gè) Java 程序編譯成可執(zhí)行文件,在 Java9 推出時(shí),可能只有 java.base 模塊支持 AOT。

安全方面的加強(qiáng)。引入新的摘要算法 SHA-3,內(nèi)置 ALPN 使得更好的支持 HTTP/2 協(xié)議,提供 DTLS(數(shù)據(jù)包傳輸層安全性協(xié)議),可以保證 UDP 數(shù)據(jù)傳輸?shù)陌踩?,PKCS12 格式替代原有的 JKS 成為 keystore 的默認(rèn)格式。

此外,統(tǒng)一 JVM 日志 (Unified JVM Logging),多版本共存 jar(Multi-release jar files),接口內(nèi)部的私有方法 (Interface provate method) 等也是非常重要的新特性。

7

與其他語言的對(duì)比,Java 的優(yōu)勢

Java 是最好的語言么?不是,因?yàn)樵诿總€(gè)領(lǐng)域都有更合適的編程語言。

C 語言無疑是現(xiàn)代計(jì)算機(jī)軟件編程語言的王者,幾乎所有的操作系統(tǒng)都是 C 語言寫成的。C++ 是面向?qū)ο蟮?C 語言,一直在不斷的改進(jìn)。

JavaScript 是能運(yùn)行在瀏覽器中的語言,豐富的前端界面離不開 Javascript 的功勞。近年來的 Node.js 又在后端占有一席之地。Python 用于系統(tǒng)管理,并通過高性能預(yù)編譯的庫,提供 API 來進(jìn)行科學(xué)計(jì)算,文本處理等,是 Linux 必選的解釋性語言。

Ruby 強(qiáng)于 DSL(領(lǐng)域特定語言),程序員可以定義豐富的語義來充分表達(dá)自己的思想。Erlang 就是為分布式計(jì)算設(shè)計(jì)的,能保證在大規(guī)模并發(fā)訪問的情況下,保持強(qiáng)壯和穩(wěn)定性。Go 語言內(nèi)置了并發(fā)能力,可以編譯成本地代碼。當(dāng)前新的網(wǎng)絡(luò)相關(guān)項(xiàng)目,很大比例是由 Go 語言編寫的,如 Docker、Kubernetes 等。

編寫網(wǎng)頁用 PHP,函數(shù)式編程有 Lisp,編寫 iOS 程序有 Swift/ObjectiveC。

一句話概括,能留在排行榜之上的語言,都是好的語言,在其所在的領(lǐng)域能做到最好。

那么,Java 語言到底有什么優(yōu)勢可以占據(jù)排行榜第一的位置呢?

其一,語法比較簡單,學(xué)過計(jì)算機(jī)編程的開發(fā)者都能快速上手。

其二,在若干了領(lǐng)域都有很強(qiáng)的競爭力,比如服務(wù)端編程,高性能網(wǎng)絡(luò)程序,企業(yè)軟件事務(wù)處理,分布式計(jì)算,Android 移動(dòng)終端應(yīng)用開發(fā)等等。

最重要的一點(diǎn)是符合工程學(xué)的需求,我們知道現(xiàn)代軟件都是協(xié)同開發(fā),那么代碼可維護(hù)性,編譯時(shí)檢查,較為高效的運(yùn)行效率,跨平臺(tái)能力,豐富的 IDE,測試,項(xiàng)目管理工具配合。都使得 Java 成為企業(yè)軟件公司的首選,也得到很多互聯(lián)網(wǎng)公司的青睞。

沒有短板,容易從市場上找到 Java 軟件工程師,軟件公司選擇 Java 作為主要開發(fā)語言,再在特定的領(lǐng)域使用其他語言協(xié)作編程,這樣的組合選擇,肯定是不會(huì)有大的問題。

所以綜合而言,Java 語言全能方面是最好的。

8

Java 未來方向的展望

如今的 Java,已經(jīng)在功能上相當(dāng)豐富了,Java 8 加入 Lambda 特性,Java 9 加入模塊化特性之后,重要的語言特性似乎已經(jīng)都納入進(jìn)來。如果要說值得考慮的一些功能,我覺得有以下幾點(diǎn):

模塊化改造完畢之后,可能會(huì)出現(xiàn)更多專業(yè)的 JDK 發(fā)行軟件商,提供在功能方面,比如針對(duì)于分布式計(jì)算,機(jī)器學(xué)習(xí),圖形計(jì)算等,納入相關(guān)的功能庫作為文件。這樣專業(yè)行業(yè)客戶可以選擇經(jīng)過充分優(yōu)化后的 JDK 版本。

Java 語義上對(duì)“模式匹配”有更強(qiáng)的支持,如今的 switch 語句能力還是比較欠缺,可以向 Erlang, Scala 等語言借鑒。

多線程并發(fā)處理,Java 做的已經(jīng)很好了。不過我個(gè)人覺得可以在多進(jìn)程多線程配合,以及語言級(jí)別數(shù)據(jù)管道表示上,可以進(jìn)行改造和優(yōu)化。

JDK9 會(huì)有 HTTP/2 client 端的能力,但毫無疑問會(huì)有更多更好的三方庫出現(xiàn),JDK 可以和這些三方庫通力合作,提供一個(gè)更好 API 界面和 SPI 參考實(shí)現(xiàn)。

目前 Java 在云計(jì)算方面遇到的最大問題還是占用內(nèi)存過大。我個(gè)人認(rèn)為從兩個(gè)方面來看:

如果該應(yīng)用的確是長時(shí)間運(yùn)行的服務(wù),可以考慮結(jié)構(gòu)清晰的單體結(jié)構(gòu),算下來總的內(nèi)存消耗并不會(huì)比多個(gè)微服務(wù)進(jìn)程占用的更多。

微服務(wù)應(yīng)用,未來可以采用編譯成本地代碼的方式,并使用優(yōu)化過的三方庫,甚至本地 so 文件,減少單個(gè)進(jìn)程的過多內(nèi)存占用。

安全框架更加清晰,SPI 可以允許三方庫提供更強(qiáng)大更高效的安全功能。

JavaEE 方向則有更多的改進(jìn)的地方:

EJB 重構(gòu)目前的 Corba 分布通信基礎(chǔ),參考 gRPC 進(jìn)行遠(yuǎn)程系統(tǒng)調(diào)用。

分解 EJB 規(guī)范,把 JVM 進(jìn)程相關(guān)的特性,如注入 / 加強(qiáng) / 事務(wù) / 安全都統(tǒng)一到 CDI 規(guī)范中;對(duì) EJB 進(jìn)行裁剪,保留遠(yuǎn)程訪問特性和作為獨(dú)立執(zhí)行主體分布式對(duì)象能力。

加強(qiáng) JMS 和 MDB,媲美 Akka 目前的能力。

JaxRS 適度優(yōu)化,不必要依賴 Servlet,或者適度調(diào)整,來提供更大的能力。

JPA 借鑒 JDO,以及融入一部分特性,做到對(duì) NoSQL 更良好的支持。

9

一些個(gè)人的心得和經(jīng)驗(yàn)分享

軟件業(yè)有個(gè) Hype Cycle 模型,有很多技術(shù)受到市場的追捧而成為明星,也有些身不逢時(shí)而備受冷漠。

EJB 是一個(gè)廣泛被誤解的技術(shù),在企業(yè)應(yīng)用分布式計(jì)算方面,EJB 給出了非常完備的技術(shù)體系。只是目前所有的應(yīng)用服務(wù)器都實(shí)現(xiàn)的不夠好。對(duì)于目前打算轉(zhuǎn)型微服務(wù)設(shè)計(jì)的架構(gòu)師,EJB 也是一個(gè)非常值得學(xué)習(xí)借鑒的技術(shù)。

Java 的慢是相對(duì)的,有些是當(dāng)前實(shí)現(xiàn)的不夠好。比如原來有人對(duì) Java 的網(wǎng)絡(luò) IO 性能提出質(zhì)疑,然而穩(wěn)定的 Netty 框架出現(xiàn)后,就沒有人再懷疑 Java 處理網(wǎng)絡(luò) IO 的能力了,甚至在 JDK8 中自身的 NIO 也相當(dāng)出色。要知道 Java 為了實(shí)現(xiàn)跨平臺(tái)能力,采用的是各個(gè)操作系統(tǒng)的一個(gè)公共能力子集,而且其設(shè)計(jì)哲學(xué)就是給出 API 框架,實(shí)現(xiàn)是可以自行實(shí)現(xiàn)和加載服務(wù)的。

Java 在處理界面方面,Swing 和 Swt 表現(xiàn)可圈可點(diǎn)(Idea 和 Eclipse 分別采用的圖形基礎(chǔ)庫),JavaFX 已經(jīng)運(yùn)用到很多的行業(yè)軟件上。在瀏覽器界面表現(xiàn)上,SpringMVC 在模板渲染頁面方面使用者最多;GWT 似乎使用者不多,但基于 GWT 的 Vaddin 在國外企業(yè)中用戶眾多,而且很多服務(wù)器管理軟件也用 GWT 寫成;JSF 也在企業(yè)軟件中得到廣泛使用,狀態(tài)信息直接在后端進(jìn)行管理,配合 js 前端框架,可以充分發(fā)揮各種技術(shù)的優(yōu)勢。

CDI 規(guī)范和 SpringFramework 在服務(wù)器程序中作用類似,Spring 是一套設(shè)計(jì)優(yōu)良,完備的框架,CDI 具有更強(qiáng)的可擴(kuò)展性。通過對(duì)注解的語義定義,一家公司可以維護(hù)一套自己的組件描述語言,來做到產(chǎn)品和項(xiàng)目之間的軟件快速復(fù)用。CDI 是定義軟件組件內(nèi)部模型的最佳方式,只可惜了解的軟件工程師實(shí)在太少。

微服務(wù)架構(gòu)在互聯(lián)網(wǎng)應(yīng)用,快速開發(fā)運(yùn)維管理方面,配合容器技術(shù)使用,有很強(qiáng)的優(yōu)勢。但并不是所有的應(yīng)用場景都適合微服務(wù):強(qiáng)事務(wù)應(yīng)用系統(tǒng),采用單體結(jié)構(gòu)的軟件體系設(shè)計(jì),更容易從整體方面維護(hù),也能獲得更優(yōu)的性能。Java 語言無論在微服務(wù)還是單體結(jié)構(gòu),都有成熟穩(wěn)定的軟件架構(gòu)供選擇使用。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動(dòng)力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉