日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

Java 20年:历史与未来

發(fā)布時(shí)間:2025/6/15 java 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java 20年:历史与未来 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

作為最受歡迎的編程語言之一,Java已經(jīng)走過了20個年頭。從已經(jīng)落寞的諾基亞到現(xiàn)在火熱的電商系統(tǒng),我們都能看到Java語言的身影。從1995年的第一個版本到現(xiàn)在的Java 1.8,我們甚至能從Java的版本迭代中看到不同時(shí)代編程語言關(guān)注的重點(diǎn)。經(jīng)過了過去20年的發(fā)展,Java已經(jīng)成為如今使用最為廣泛的企業(yè)級語言。為了慶祝Java的第20個生日,InfoQ為此采訪了Java技術(shù)專家彭晨陽(網(wǎng)絡(luò)ID:板橋)。

\\

InfoQ:您是哪一年開始接觸Java的?還記得當(dāng)時(shí)『世界』是怎么看這門語言的嗎?

\\\

板橋:我大概是2000年之前開始接觸Java,當(dāng)時(shí)大家都認(rèn)為Java慢,幾乎沒有幾個人看得上眼,那時(shí)使用Perl/C實(shí)現(xiàn)CGI比較快,PHP很方便。

\\\

InfoQ:能回憶下你的職業(yè)生涯中與Java相關(guān)的經(jīng)歷嗎?

\\\

板橋:2000年之前使用Perl開發(fā)過一個類似西祠、西陸社區(qū)網(wǎng)站,隨著功能日益復(fù)雜,維護(hù)拓展比較麻煩,打算使用Java改造升級。但是Java比較復(fù)雜,當(dāng)時(shí)有EJB等規(guī)范,因此誤用過EJB來做產(chǎn)品,其實(shí)EJB更適合做企業(yè)中可靠性要求比較高的項(xiàng)目。而對于社區(qū)項(xiàng)目來說,性能是關(guān)鍵,這個道理后來我從CAP定理中才得到答案,當(dāng)然當(dāng)時(shí)也沒有聽說過CAP理論,這段教訓(xùn)是相當(dāng)深刻的,EJB很難掌握,運(yùn)行起來更慢,最后也以失敗告終。

\\

之后研究學(xué)習(xí)了Jive開源Java論壇,對其設(shè)計(jì)模式與緩存兩個優(yōu)點(diǎn)進(jìn)行了綜合學(xué)習(xí)與應(yīng)用。有一段時(shí)間參與過手機(jī)游戲的開發(fā),那時(shí)客戶端是J2ME,但是游戲邏輯不加載在客戶端,而是將客戶端只作為界面展現(xiàn),類似今天的瀏覽器+Angular.js這樣富客戶端。當(dāng)然,這個系統(tǒng)對網(wǎng)絡(luò)要求比較高,但是當(dāng)時(shí)無線網(wǎng)絡(luò)3G還沒有推出,后來放棄了,從該項(xiàng)目中我意識到高性能的大型并發(fā)系統(tǒng)使用Tomcat這樣的普通Web服務(wù)器已經(jīng)無法承擔(dān),于是對異步消息JMS等技術(shù)產(chǎn)生了興趣。

\\

之后,陸陸續(xù)續(xù)參與過一些項(xiàng)目的咨詢和設(shè)計(jì),大部分都比較普通,無非是CRUD增刪改查。于是萌生了做一個快速開發(fā)框架,在不丟失多層架構(gòu)的基礎(chǔ)上能有Delphi等二層架構(gòu)的開發(fā)效率,這大概是JDON框架的原型。當(dāng)然,該框架后來從快速開發(fā)為首要目標(biāo)轉(zhuǎn)移到靈活性為首要目標(biāo)。

\\

做了不少項(xiàng)目后,需要尋求理論指導(dǎo),原來的數(shù)據(jù)庫+Java路數(shù)已經(jīng)不能包打天下,后來逐步開始引入DDD領(lǐng)域驅(qū)動設(shè)計(jì)CQRS和EventSourcing。

\\\

InfoQ:很多人都在唱衰Java,您能結(jié)合Java的發(fā)展現(xiàn)狀和趨勢談?wù)凧ava的前景嗎?

\\\

板橋:Java發(fā)展到今天已經(jīng)20年了,作為一個編程語言確實(shí)不簡單,想當(dāng)初人人受懷疑的慢語言到今天通用的健壯語言,真是大智若愚啊。Java代表的面向?qū)ο笏枷氪_實(shí)給工程領(lǐng)域帶來了革命性的變化,當(dāng)然思想是不斷進(jìn)化發(fā)展的,如今人們開始看好函數(shù)式編程語(FP)。盡管Java 8也加入了函數(shù)語言的特點(diǎn),但是OOP和FP兩者到底是不同的編程范式,不過掌握FP有一定門檻,這也是造成很多人觀望的一個原因。

\\

Java在數(shù)據(jù)流處理方面還是很有競爭力的,而大數(shù)據(jù)實(shí)時(shí)流處理系統(tǒng)是Java的新領(lǐng)域,在這個領(lǐng)域有Apache Kafka、Apache Samza、Apache Storm、Apache Spark的Streaming模塊和最新的Apache Flink。Spark是基于JVM的函數(shù)語言Scala編寫,其余都是Java編寫。

\\\

InfoQ:JVM的普及促使相關(guān)周邊語言不斷涌現(xiàn),你怎么看這些JVM語言?

\\\

板橋:以Scala為代表的JVM語言發(fā)展迅速,Scala語言特性是首先區(qū)分不變性和可變性,當(dāng)初使用EJB時(shí)首先要區(qū)分是無狀態(tài)和有狀態(tài),這說明思路是一脈相承的。可變性的狀態(tài)是造成副作用和各種Bug的罪魁禍?zhǔn)?#xff0c;可能我們?nèi)绻皇前芽勺儬顟B(tài)使用數(shù)據(jù)庫實(shí)現(xiàn)時(shí)沒有注意到這種問題。其實(shí)這個問題遍布在應(yīng)用的每個角落,特別是使用類和對象這個OOP概念實(shí)現(xiàn)時(shí)最容易發(fā)生。一個類或?qū)ο蟀ㄗ侄魏头椒?#xff0c;如果這個字段值是可變的(可變狀態(tài)),我們使用這個對象時(shí)如果不打開它的類代碼是無法得知它有可變狀態(tài)的,那么就會導(dǎo)致各種副作用發(fā)生。

\\

而函數(shù)編程由于函數(shù)方法是第一公民,沒有什么東西擋在它的前面,沒有類或?qū)ο蟀鼈?#xff0c;因此,它們無法私藏可變狀態(tài)字段,能夠確保應(yīng)用系統(tǒng)每行代碼都是基于不可變的基礎(chǔ)之上。

\\

如果說Scala之類JVM的函數(shù)語言適合不斷添加功能函數(shù)的應(yīng)用場景,那么Java之類的OOP語言適合不斷增加實(shí)體物體的應(yīng)用場景。前者好動,后者好靜。

\\\

InfoQ:Java是如何擁抱云時(shí)代的?

\\\

板橋:Java在云時(shí)代面臨以Go語言為主的容器(Docker等技術(shù))生態(tài)圈的挑戰(zhàn)。其實(shí)JVM也是一種容器,但是這種容器特性正在被Linux學(xué)習(xí)與趕超,那么,JVM的定位就可能比較尷尬。

\\

Docker之類容器可以在本地筆記本或電腦上運(yùn)行,然后同樣可以部署到云上運(yùn)行。當(dāng)在云上運(yùn)行時(shí),Kubernetes能夠以一種可控的方式升級容器從而實(shí)現(xiàn)運(yùn)行管理一批容器,如同一個大型船隊(duì)或艦隊(duì)一樣,你可以控制它們的流量訪問量,可以指定多少個容器來擴(kuò)展支撐一個服務(wù)的運(yùn)行,隨著訪問量提升,你通過增加容器數(shù)量能夠整個系統(tǒng)的負(fù)載能力。

\\

當(dāng)然,Java的大型分布式系統(tǒng)越來越多,Java在云計(jì)算與分布式系統(tǒng)中還是扮演主要角色,形成一個大型的生態(tài)圈。當(dāng)我們站在泰山之上,一覽眾山小,當(dāng)你在全球擁有多個數(shù)據(jù)中心時(shí),語言已經(jīng)變得不那么重要了,關(guān)鍵是架構(gòu)設(shè)計(jì)。

\\\

InfoQ:Go語言這兩年比較火熱,你怎么看這門語言?與Java相比,他有哪些優(yōu)劣?

\\\

板橋:Go語言相對Java主要優(yōu)點(diǎn)是其并發(fā)組件模型,Java的并發(fā)比較低級,無非是多線程與鎖,想搞清楚Java中各種鎖的用途,包括數(shù)據(jù)集合Collection的線程安全性與性能差異對比,需要花費(fèi)大量時(shí)間與精力,包括使用經(jīng)驗(yàn)。而Go語言使用了Channel/CEP這樣的組件簡單封裝了多線程與鎖,將以前JMS的Queue隊(duì)列模型架構(gòu)引入到了語言之中,兩個對象之間交互只要通過Channel通道就可以。這種模型保證了并發(fā)性,有簡化了編程模型,無疑受到很多人的歡迎。

\\

Go語言當(dāng)前也受到更加強(qiáng)勁的Rust語言挑戰(zhàn),如果說,Go語言的Channel是一種有形的設(shè)計(jì),那么,Rust語言的并發(fā)模型達(dá)到無形的設(shè)計(jì),只要你編寫好函數(shù)方法,安全性與并發(fā)性就無形中得到了解決,不用專門去思考并發(fā),有意識地去使用并發(fā)組件模型編程。

\\\

InfoQ:現(xiàn)在的開發(fā)語言特別多,Java、Go、PHP、Rust、Python等,你認(rèn)為未來語言的發(fā)展趨勢是怎么樣的?

\\\

板橋:現(xiàn)在的開發(fā)語言如雨后春筍,主要原因是CPU進(jìn)入多核并發(fā)時(shí)代,以及大型架構(gòu)進(jìn)入分布式系統(tǒng),如何使用一種語言從微觀的CPU多核之間并發(fā)到數(shù)萬臺服務(wù)器之間的分布式計(jì)算處理,這種大一統(tǒng)的愿景促使人們在不斷探索。

\\

在Java中,我們可以通過框架來實(shí)現(xiàn)這點(diǎn),以我前幾年研發(fā)Jdon框架為例,雖然能夠勉強(qiáng)實(shí)現(xiàn)并發(fā)與分布式,但是這種實(shí)現(xiàn)需要很強(qiáng)的知識背景,不利于初學(xué)者上手。而要達(dá)到普及這個目標(biāo),必須從語言入手,讓語言初學(xué)者在學(xué)習(xí)掌握語言以后,無形中就會實(shí)現(xiàn)了并發(fā)與分布式。

\\

Go語言在這方面比較突出,其并發(fā)模型以讀寫操作為基礎(chǔ)。請注意,Java等語言并發(fā)模型沒有這么高,它們是以線程為基礎(chǔ),再應(yīng)用到讀寫場景中,而我們現(xiàn)實(shí)中必須以讀寫為基礎(chǔ),再應(yīng)用到具體業(yè)務(wù)場景中,這里面高低層次:線程–\u0026gt;讀寫操作–\u0026gt;業(yè)務(wù)應(yīng)用,無疑越靠近業(yè)務(wù)應(yīng)用的語言越能簡化我們的開發(fā),而分布式系統(tǒng)也是基于讀寫操作,著名的CAP定理也隱含了以讀寫操作為基礎(chǔ)的語境。

\\\

受訪嘉賓介紹

\\

彭晨陽,Jdon.com創(chuàng)辦者和版主。軟件開發(fā)設(shè)計(jì)咨詢從業(yè)20年,10余年Java開發(fā)經(jīng)驗(yàn),擁有ERP、大型游戲、互動電視三網(wǎng)合一等架構(gòu)經(jīng)驗(yàn)。獨(dú)立咨詢顧問,個人擅長復(fù)雜系統(tǒng)的軟件架構(gòu)和領(lǐng)域建模。流行新技術(shù)思想的傳道者,主持解道網(wǎng)站跟蹤國際最新軟件架構(gòu)思想和設(shè)計(jì)技術(shù)。首個國內(nèi)Java開源框架項(xiàng)目Jdon框架的設(shè)計(jì)者。

\\

感謝臧秀濤對本文的審校。

\\

給InfoQ中文站投稿或者參與內(nèi)容翻譯工作,請郵件至editors@cn.infoq.com。也歡迎大家通過新浪微博(@InfoQ,@丁曉昀),微信(微信號:InfoQChina)關(guān)注我們,并與我們的編輯和其他讀者朋友交流(歡迎加入InfoQ讀者交流群)。

總結(jié)

以上是生活随笔為你收集整理的Java 20年:历史与未来的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。