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

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

1

寫(xiě)在前面

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

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

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

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

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

2

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

Java 語(yǔ)言源于 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)開(kāi)始興起,Java 的 Applet 能在 Mozilla 瀏覽器中運(yùn)行,被看作是未來(lái)的互聯(lián)網(wǎng)語(yǔ)言。

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

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

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

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

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

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

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

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

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

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

按照原來(lái)的計(jì)劃,Java9 應(yīng)該在今年 7 月發(fā)布,但因?yàn)槟K化 (JPMS) 投票未通過(guò)的原因,推遲到今年 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è)國(guó)家,一般來(lái)說(shuō)以地域命名。目前最有影響力的兩個(gè) JUG 分別是倫敦的 LJC(London Java Community) 和巴西的 SouJava,目前都是 JCP 的 EC(執(zhí)行委員會(huì)) 成員。國(guó)內(nèi)目前有 GreenTea JUG(北京和杭州),Shanghai JUG,GuangDong JUG, Shenzhen JUG, Nanjing JUG 等。GreanTeaJUG 以阿里巴巴研發(fā)部門(mén)成員為核心,包括北京和杭州兩地各個(gè)公司從事 Java 開(kāi)發(fā)的研發(fā)人員,過(guò)去幾年成功舉辦了很多有業(yè)界影響力的活動(dòng),特別是邀請(qǐng)到眾多國(guó)外的 Java 技術(shù)專家來(lái)分享知識(shí),目前是國(guó)內(nèi)最大的 JUG 開(kāi)發(fā)者組織。

Java 開(kāi)源社區(qū) Java 是一門(mén)開(kāi)放的語(yǔ)言,其開(kāi)源社區(qū)也是參與者眾多。最有名的應(yīng)當(dāng)數(shù) Apache 社區(qū),目前已經(jīng)擁有近 200 個(gè)頂級(jí)項(xiàng)目,其中絕大多數(shù)是 Java 語(yǔ)言項(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 等等。

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

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

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

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

4

目前大的玩家

Java 語(yǔ)言和品牌都是 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 語(yǔ)言的發(fā)展。任何組織或者個(gè)人都可以加入 JCP(Java Community Process),并提交 JSR 來(lái)給 JavaSE,JavaEE,JavaME 等提交新的 API 或者服務(wù)定義。Java 擁有當(dāng)今最完備的語(yǔ)言生態(tài),幾乎所有能想到的應(yīng)用范圍,都有軟件廠商提出過(guò)標(biāo)準(zhǔn)化的構(gòu)想,其中很多已經(jīng)被接納為 JSR 提案。如今 JSR 總數(shù)已經(jīng)都 400 多個(gè)。

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

當(dāng)前 EC 委員會(huì)中,對(duì)于 Java 起到最重要作用的,無(wú)疑是 Oracle,IBM 和 Redhat 三家公司。Oracle 自然不用說(shuō);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ì)票,最后才沒(méi)有通過(guò)的。

另外的幾個(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)勢(shì)在于使用多線程去完成垃圾清理工作,這樣可以充分利用多核的特性,大幅降低 GC 時(shí)間。

CMS(Concurrent Mark-Sweep),是以犧牲吞吐量為代價(jià)來(lái)獲得最短回收停頓時(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)勢(shì)而言是內(nèi)存碎片的產(chǎn)生率大大降低。

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

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

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

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

6

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

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

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

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

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

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

然而到了今天,無(wú)論是大型互聯(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

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

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

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

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

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

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

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

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

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

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

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

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

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

8

Java 未來(lái)方向的展望

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

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

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

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

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

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

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

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

安全框架更加清晰,SPI 可以允許三方庫(kù)提供更強(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)程訪問(wèn)特性和作為獨(dú)立執(zhí)行主體分布式對(duì)象能力。

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

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

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

9

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

軟件業(yè)有個(gè) Hype Cycle 模型,有很多技術(shù)受到市場(chǎng)的追捧而成為明星,也有些身不逢時(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)的不夠好。比如原來(lái)有人對(duì) Java 的網(wǎng)絡(luò) IO 性能提出質(zhì)疑,然而穩(wěn)定的 Netty 框架出現(xiàn)后,就沒(méi)有人再懷疑 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ǔ)庫(kù)),JavaFX 已經(jīng)運(yùn)用到很多的行業(yè)軟件上。在瀏覽器界面表現(xiàn)上,SpringMVC 在模板渲染頁(yè)面方面使用者最多;GWT 似乎使用者不多,但基于 GWT 的 Vaddin 在國(guó)外企業(yè)中用戶眾多,而且很多服務(wù)器管理軟件也用 GWT 寫(xiě)成;JSF 也在企業(yè)軟件中得到廣泛使用,狀態(tài)信息直接在后端進(jìn)行管理,配合 js 前端框架,可以充分發(fā)揮各種技術(shù)的優(yōu)勢(shì)。

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

微服務(wù)架構(gòu)在互聯(lián)網(wǎng)應(yīng)用,快速開(kāi)發(fā)運(yùn)維管理方面,配合容器技術(shù)使用,有很強(qiáng)的優(yōu)勢(shì)。但并不是所有的應(yīng)用場(chǎng)景都適合微服務(wù):強(qiáng)事務(wù)應(yīng)用系統(tǒng),采用單體結(jié)構(gòu)的軟件體系設(shè)計(jì),更容易從整體方面維護(hù),也能獲得更優(yōu)的性能。Java 語(yǔ)言無(wú)論在微服務(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日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

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

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(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ì)日本游戲市場(chǎng)的投資。

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

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

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

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

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

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

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

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

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

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

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