發(fā)布于:2020-12-24 16:14:32
0
1095
0
我對Java的第一次經(jīng)驗來自我的第二門計算機科學(xué)課程,即CS基礎(chǔ)課。編程課程的入門部分使用C ++,這是我在BASIC之外的第一個編程。通過入門課程,我學(xué)習(xí)了循環(huán)和邏輯,變量和函數(shù)聲明,內(nèi)存分配以及基本對象和類。
此后,CMU的CS部門決定改用這種全新的編程語言Java。它可以在任何平臺上運行,這很棒,因為主要的CS集群是Solaris計算機(Sun推出的Unix變體)。早在每個人都擁有Mac筆記本電腦和Linux盒子之前,這種情況就回來了。但這給我?guī)砹似渌Z言功能的混亂:線程,垃圾回收,AWT(抽象的Windows工具包),異常和面向?qū)ο蟮木幊獭?/span>
自那時以來,Java已經(jīng)經(jīng)歷了大約14個主要功能版本,在甲骨文與甲骨文收購Sun Microsystems之間進行了過渡,開源了該語言背后的代碼,并產(chǎn)生了使用其虛擬機的幾種語言,包括Scala,Clojure和Kotlin。就個人而言,我曾在多家公司中使用Java構(gòu)建復(fù)雜的產(chǎn)品,無論這些產(chǎn)品是嵌入在瀏覽器中還是通過WebStart安裝在桌面中,還是在面向服務(wù)的體系結(jié)構(gòu)后端中在幕后。
1995年至2020年-那個四分之一世紀(jì)見證了技術(shù)行業(yè)幾個時代的興衰。我問了甲骨文Java平臺小組軟件開發(fā)副總裁Georges Saab,Java的哪些變化產(chǎn)生了最大的影響,以及他認為哪些即將推出的功能將對其未來產(chǎn)生真正的影響。薩博(Saab)感覺到的一些功能使該語言激增,還有一些將使它持久。
重大變化
產(chǎn)生巨大影響的第一個功能根本就不是Java語言的變化。早期發(fā)行版中對庫的支持有了很大的改進。在1.0到1.3之間,這些庫包括Swing窗口工具包,Collections框架,用于遠程調(diào)用的類似RPC的API,用于與數(shù)據(jù)庫交互的JDBC等。標(biāo)準(zhǔn)庫變得更豐富,更復(fù)雜,并使Java成為一種真正的企業(yè)語言。
在2004年,Java添加了泛型,允許在實例化該項目時指定類型,方法和接口以及相關(guān)的數(shù)據(jù)類型,而又不犧牲類型安全性。薩博說:“當(dāng)時,仿制藥是一個挑戰(zhàn),人們對此有強烈的看法。”如今,泛型已成為該語言的持久特性之一。
Java可能被設(shè)計為完全面向?qū)ο蟮恼Z言,但是當(dāng)Java SE 8在2014年發(fā)布時,它添加了Lambda表達式(又名閉包),其中添加了一些功能性編程元素。并不是每個問題都能由OOP最好地解決,并且通過添加Lambda,Java變得更加靈活。
Java 9解決了模塊可能會導(dǎo)致大量JAR文件導(dǎo)致的潛在依賴性問題。它允許封裝庫代碼,以便在導(dǎo)入軟件包時,僅導(dǎo)入所需的模塊,而不導(dǎo)入整個JAR。該模塊具有的所有依賴項都已明確聲明,因此您可以檢查代碼以查看要導(dǎo)入的代碼。薩博說:“讓他們知道,他們并非無意間依賴于某種事物,這使我們達到了Java生態(tài)系統(tǒng)對變革和持續(xù)發(fā)展更具彈性的地步?!?/span>
獎勵功能的改進是普通用戶可能沒有注意到的一項功能:JVM的性能一直在不斷提高。薩博說:“您不一定會看到它的發(fā)生,但是您看到的是效果?!?“我編寫的在J2SE 1.3上運行的代碼仍然可以在Java 14上運行,但是速度要快得多。它不僅速度更快,而且以某種方式利用硬件變化帶來的更快速度,這種變化在2004年沒人能想到?!?/span>
Java正在為未來醞釀什么
盡管Java在眾多行業(yè)中占有重要地位,但它并沒有停滯不前。薩博提到了Java帶來的四個讓他興奮的大型項目,所有這些項目都用代號命名:Loom,Valhalla,Leyden和ZGC。
Loom項目旨在放松Java線程與本機線程之間的耦合。 Java從一開始就通過線程進行并發(fā),但是它們始終與OS線程綁定。 Loom引入了光纖,JVM管理的線程,這些線程允許更有效的并發(fā)。使用Java服務(wù)器端應(yīng)用程序處理成千上萬并發(fā)用戶的負載,更好的并發(fā)性只能提高Web性能。
Valhalla的目標(biāo)是修改Java的內(nèi)存模型,以允許不可變類型,該類型比基元更復(fù)雜,但不如對象靈活。有時,您擁有的復(fù)雜數(shù)據(jù)在該對象的整個使用期限內(nèi)都不會改變;不必為課程增加負擔(dān)。最初的建議更簡潔地說:“代碼就像一個類,就像一個整數(shù)一樣工作。” Saab說:“對于諸如用于機器學(xué)習(xí)或自然語言的大數(shù)據(jù)之類的東西,Valhalla承諾以一種允許JVM充分利用自Java創(chuàng)建以來發(fā)生了巨大變化的現(xiàn)代硬件架構(gòu)的方式來表示數(shù)據(jù)。”
Leyden旨在解決Java應(yīng)用程序的啟動時間。對于整體和單個應(yīng)用程序,Java有時需要花費一些時間,但是一旦啟動并運行,它們很快。薩博說:“如果您的應(yīng)用程序服務(wù)器要運行兩周或兩個月或兩年,那就太好了,但是如果您要運行30毫秒,那就不好了?!狈?wù)器端軟件越來越小,分布越來越分散,因此快速啟動是快速響應(yīng)時間的關(guān)鍵。
ZGC是一種新的垃圾收集器,可以處理龐大的堆大小(最大為16 TB),而不會增加暫停時間。對于可能正在處理內(nèi)存中大量數(shù)據(jù)的大數(shù)據(jù)應(yīng)用程序,將垃圾收集的暫停時間控制在10ms以下,這意味著對大數(shù)據(jù)集的處理速度不會因語言的限制而停滯不前。
Java已經(jīng)成長為現(xiàn)代互聯(lián)網(wǎng)和移動應(yīng)用程序環(huán)境中不可或缺的一部分,并有望在未來一段時間內(nèi)繼續(xù)成為信息技術(shù)工具包的一部分。四分之一世紀(jì)是編程中的永恒,因此提高Java,過去,現(xiàn)在和未來的“類”。