自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

走過近30年:Java外表成熟,內(nèi)心依舊少年

譯文 精選
開發(fā) 前端
Java一直是免費(fèi)的,至少對(duì)程序員來說是這樣。從一開始,Sun公司就想用免費(fèi)的工具和硬件吸引開發(fā)人員,1997年,該公司大膽地將語言的許多部分及其虛擬機(jī)開源。直到最近,開發(fā)人員都可以或多或少地一次編寫并在任何地方運(yùn)行,而不用支付一分錢。

作者 | Peter Wayner

編譯 | 星璇

出品 | 51CTO技術(shù)棧(微信號(hào):blog51cto)

走過近30年,Java早已不再是當(dāng)初的Java了。它變老了?還是變時(shí)髦了?

Java很古老嗎?是的,這是一種由老前輩使用的編程語言,他們喋喋不休地談?wù)撝吖獾那岸嗣姘搴蛙洷P時(shí)代。

Java依舊時(shí)髦嗎?是的,它仍然擁有著所有最新的語言增強(qiáng)功能,用于直觀編碼和一流性能?

也許Java介于兩者之間:外表成熟,但內(nèi)心年輕。

1995年5月23日,Java正式進(jìn)入世界,距今已有近30年。

它最初是一種名為“Oak”的機(jī)頂盒技術(shù),Sun Microsystems公司認(rèn)為該技術(shù)很快就會(huì)占領(lǐng)美國(guó)客廳。但該計(jì)劃起初并未成功。但該語言發(fā)展成為現(xiàn)代軟件的核心基礎(chǔ)之一,運(yùn)行于從小型傳感器芯片到大型服務(wù)器盒的任何設(shè)備上。從那時(shí)起,Java的理念發(fā)生了巨大的變化。

Sun和Oracle在嫁接功能方面做得非常出色,這些功能讓語言感覺新鮮,而不會(huì)過多地干擾核心功能。也許Java只是那些不斷發(fā)展下去的語言中的一種而已。

事實(shí)上,在名為“Java”的大帳篷中生活的許多功能與最初設(shè)想的有所不同,通常是根本性的不同。程序員正在創(chuàng)建1995年、2005年甚至2015年的人們不會(huì)認(rèn)出的代碼,但舊代碼仍在運(yùn)行。這是一種高質(zhì)量的處理藝術(shù)。

2010年收購(gòu)Sun公司的甲骨文公司現(xiàn)在定期發(fā)布新版本,并添加功能以保持Java語言的相關(guān)性。

以下是Java發(fā)生變化的十一種方式,大多數(shù)都是朝著更好的方向發(fā)展。

Java編程比以前更好的10個(gè)理由:

虛擬線程、結(jié)構(gòu)化并發(fā)、不可變數(shù)據(jù)、垃圾收集、模式匹配、簡(jiǎn)化的語法、密封類、外部函數(shù)和內(nèi)存、矢量API、改進(jìn)的空值處理

Java變得不好的一個(gè)理由:

免費(fèi),就像付費(fèi)許可一樣?

1、Virtual threads虛擬線程

Java的原始版本為開發(fā)人員提供了創(chuàng)建自己的Thread對(duì)象并控制代碼在多線程和多核環(huán)境中運(yùn)行的方式的機(jī)會(huì)。雖然總比沒有好,但程序員很快發(fā)現(xiàn)Thread對(duì)象相當(dāng)龐大,創(chuàng)建和銷毀需要花費(fèi)太多時(shí)間。在程序開始時(shí)創(chuàng)建一個(gè)永久線程池成為解決笨重線程的常用方法。

隨著虛擬線程的出現(xiàn),Java 19中的所有情況都發(fā)生了變化?,F(xiàn)在,JVM處理了Java程序中分配系統(tǒng)資源的大部分工作。程序員指定并行何時(shí)可用,運(yùn)行時(shí)JVM在可能的情況下并發(fā)運(yùn)行代碼。虛擬線程對(duì)微服務(wù)等現(xiàn)代架構(gòu)來說是一個(gè)福音,它們更容易開發(fā)和支持。

2、Structured concurrency 結(jié)構(gòu)化并發(fā)

較輕的線程只是一個(gè)開始。Java正在添加一個(gè)抽象的并行模型,這將使程序員和JVM更容易同時(shí)處理工作負(fù)載。新的結(jié)構(gòu)化并發(fā)模型為程序員提供了將Java工作負(fù)載分解為任務(wù)的機(jī)會(huì),然后將這些任務(wù)分組到范圍中。Scopes被收集成在同一個(gè)線程中一起工作的纖維。

圖片圖片

其目標(biāo)是為Java開發(fā)人員提供一個(gè)用于構(gòu)建并行程序的標(biāo)準(zhǔn)樣板模型,因此他們不需要每次都對(duì)此進(jìn)行深入的推理。結(jié)構(gòu)化并發(fā)還使虛擬機(jī)更容易檢測(cè)并發(fā)執(zhí)行的機(jī)會(huì),并將其映射到處理器核心。

3、Immutable data 不可變數(shù)據(jù)

一開始,String是固定的。一旦創(chuàng)建了字符串,它就永遠(yuǎn)無法更改。調(diào)用像toLowerCase之類的函數(shù)會(huì)創(chuàng)建一個(gè)全新的String。這使得JVM更容易管理跨線程的安全性和同步性。

現(xiàn)在,Java程序員可以通過調(diào)用“Records”來為自己的對(duì)象指定相同的不可變規(guī)則。這簡(jiǎn)化了多線程安全、緩存和同步。代碼中會(huì)列出了字段的名稱和類型,JVM處理其余部分。equals、 hashCode 和 toString 等常用方法會(huì)自動(dòng)創(chuàng)建。其余時(shí)間,JVM 確保記錄是不可變的,這簡(jiǎn)化了許多程序細(xì)節(jié)并加速了運(yùn)行代碼。

4、Garbage collection 垃圾收集

Java總是處理內(nèi)存分配和回收的許多細(xì)節(jié),這是許多程序員樂于委托給JVM的一項(xiàng)功能。不過,有時(shí),原始垃圾收集器會(huì)暫停足夠長(zhǎng)的時(shí)間,以至于用戶會(huì)注意到性能滯后。

如今,程序員可以在四個(gè)垃圾收集器之間進(jìn)行選擇,它們使用各種不同的垃圾收集算法,專門用于不同類型的應(yīng)用程序:

Garbage First(G1)垃圾回收器是默認(rèn)的選擇,它能以更短的暫停時(shí)間提供更好的吞吐量。

G1采用了從早期Java垃圾收集迭代中吸取的經(jīng)驗(yàn)教訓(xùn)中發(fā)展起來的技術(shù),比如對(duì)最大的塊進(jìn)行混洗,以及對(duì)頻繁更改的小對(duì)象進(jìn)行精細(xì)調(diào)整的識(shí)別。

Z垃圾收集器被設(shè)計(jì)為非常低的延遲,這是web服務(wù)器、流服務(wù)和其他實(shí)時(shí)數(shù)據(jù)工作的要求。它也可以很好地處理非常大的堆,因?yàn)樗脑O(shè)計(jì)可以擴(kuò)展到16 TB的RAM。

并發(fā)垃圾回收器將在后臺(tái)運(yùn)行,而不會(huì)停止應(yīng)用程序。它最適合像交互式應(yīng)用程序這樣永遠(yuǎn)不應(yīng)該暫停的工作,盡管它可能沒有那么高效。

最后,并行收集器使用多個(gè)線程更快地收集數(shù)據(jù),但停止更不可預(yù)測(cè)。

圖片圖片

開發(fā)人員不必拘泥于單一的垃圾收集方法,也不必求助于其他解決方案,如通過重用對(duì)象來模擬自己的內(nèi)存管理?,F(xiàn)在有四個(gè)主要的選擇,每一個(gè)都提供了更多的調(diào)整和實(shí)驗(yàn)選項(xiàng)。

5、Pattern matching with switch 模式匹配

Java團(tuán)隊(duì)還在一些最低的語法級(jí)別上增強(qiáng)了該語言,為開發(fā)人員提供了更多的選擇來編寫更干凈、更具表現(xiàn)力的邏輯。switch關(guān)鍵字用于創(chuàng)建if-then-else條件的堆棧,現(xiàn)在提供了模式匹配,這意味著指定各種情況的邏輯不限于equals等基本表達(dá)式。

用這些模式編寫的Java代碼特別簡(jiǎn)潔,不僅可以區(qū)分?jǐn)?shù)據(jù)中的值,還可以區(qū)分對(duì)象類型??梢允褂盟幸妙愋秃涂罩羔槨.?dāng)然,仍然支持更傳統(tǒng)的帶有失敗語義的邏輯,因此舊代碼可以繼續(xù)平穩(wěn)運(yùn)行。

6、Streamlined syntax簡(jiǎn)化的語法

一開始,編寫Java與編寫C或C++沒有太大區(qū)別?;ɡㄌ?hào)和分號(hào)在Java中的作用與在C中的作用大致相同。循環(huán)是用經(jīng)典的三部分形式構(gòu)建的。盡管它的內(nèi)部與Lisp有著深刻的聯(lián)系,但Java的基本語法與C的沒有太大區(qū)別。

不過,最近添加的內(nèi)容都借鑒了Ruby和Python等腳本語言的簡(jiǎn)單性。For循環(huán)不需要拼寫出每一個(gè)細(xì)節(jié),因?yàn)榫幾g器現(xiàn)在可以在循環(huán)列表或數(shù)組時(shí)直觀地顯示它們。對(duì)于想要保存擊鍵的程序員來說,匿名函數(shù)和lambda表達(dá)式也是不錯(cuò)的選擇。C的一些冗長(zhǎng)和多余的標(biāo)點(diǎn)符號(hào)仍然存在,但今天的Java程序員可以用更少的字符拼寫出復(fù)雜的結(jié)構(gòu)。

7、Sealed classes密封類

從一開始,JVM的設(shè)計(jì)就是為了防止程序員錯(cuò)誤地在程序中留下許多常見的安全漏洞。最新版本增加了更多選項(xiàng)。例如,密封類允許類創(chuàng)建者準(zhǔn)確地指定哪些類可以擴(kuò)展它。

這可以防止其他使用庫的人擴(kuò)展類并添加或重寫一些原始功能。密封類的運(yùn)行速度也比傳統(tǒng)類快一點(diǎn),因?yàn)樗鼈冊(cè)试S更積極的優(yōu)化和內(nèi)聯(lián)。它們還可以簡(jiǎn)化方法調(diào)度。

8、Foreign functions and memory 外部函數(shù)和內(nèi)存

Java虛擬機(jī)被設(shè)計(jì)成一個(gè)有圍墻的花園或一個(gè)類型安全的沙箱。虛擬機(jī)保護(hù)代碼并防止代碼在本機(jī)運(yùn)行時(shí)可能發(fā)生的許多一般攻擊。對(duì)于程序員來說,最初的Java Native Interface(JNI)有點(diǎn)像后門。Java團(tuán)隊(duì)知道一些開發(fā)人員需要連接到用其他語言編寫的庫和堆棧,并且一些系統(tǒng)調(diào)用是必不可少的。因此,他們?cè)贘VM的盔甲上打開了這個(gè)洞,并簡(jiǎn)單地警告了使用它的危險(xiǎn)。

現(xiàn)在,我們有了外部函數(shù)和內(nèi)存API,目前是第三次預(yù)覽中的JEP。這個(gè)API將使它更容易和更安全地與外部連接。現(xiàn)在,更多的工作可以用純Java編寫,這為普通Java程序員打開了開始連接到通用系統(tǒng)內(nèi)存的機(jī)會(huì)。該提案還增加了更好的防護(hù)措施,如類型檢查,以阻止一些最嚴(yán)重的潛在溢出攻擊。這個(gè)API將使Java代碼更容易承擔(dān)系統(tǒng)編碼中更低級(jí)的任務(wù)和數(shù)據(jù)處理。對(duì)于Java程序員來說,這是一種更安全的方式來開始突破沙箱。

圖片圖片

9、The Vector API 矢量API

許多資深Java程序員都知道最初的Vector類,它更多的是一種數(shù)據(jù)結(jié)構(gòu),而不是一種數(shù)學(xué)工具。這是一個(gè)靈活且同步的解決方案,用于存儲(chǔ)與List沒有太大區(qū)別的對(duì)象。

新的 Vector API是更多。這是一種數(shù)學(xué)數(shù)據(jù)處理工具,隨著人工智能算法以與物理科學(xué)家和數(shù)學(xué)家或多或少相同的方式使用矩陣和向量,這種工具變得越來越普遍。單個(gè)元素可以是原始類型,并且支持許多基本的數(shù)學(xué)運(yùn)算,如點(diǎn)積。

圖片圖片

查看Vector類和API之間的區(qū)別的一個(gè)好方法是查看add方法的作用。在原始類中,它只是像所有其他Collections類一樣,將一個(gè)對(duì)象粘貼在數(shù)據(jù)結(jié)構(gòu)的末尾。在API中,它用于在數(shù)學(xué)上添加單個(gè)元素,更像工程師所期望的那樣。Vector API還承諾開放一些較新的SIMD處理器的巨大計(jì)算能力,使Java程序員能夠編寫出可以在許多長(zhǎng)向量中進(jìn)行轉(zhuǎn)換的代碼。

10、Better null processing 改進(jìn)的空值處理

那個(gè)對(duì)象是空指針嗎?許多Java代碼專門用于檢查、雙重檢查和三重檢查對(duì)象。為了簡(jiǎn)化代碼并加快速度,Java一直在緩慢地添加以更優(yōu)雅的方式處理空指針的功能。

例如,Stream API可以處理長(zhǎng)數(shù)據(jù)流,并且不會(huì)在偶爾出現(xiàn)空值時(shí)掛斷。Optional類包裝器可能包含也可能不包含實(shí)際對(duì)象,從而使代碼能夠很好地流動(dòng)。如果你仍然想檢查null,有一個(gè)null安全運(yùn)算符(?.)可以以非常簡(jiǎn)潔的方式測(cè)試null。

圖片圖片

11、免費(fèi),就像付費(fèi)許可一樣?

Java一直是免費(fèi)的,至少對(duì)程序員來說是這樣。從一開始,Sun公司就想用免費(fèi)的工具和硬件吸引開發(fā)人員,1997年,該公司大膽地將語言的許多部分及其虛擬機(jī)開源。直到最近,開發(fā)人員都可以或多或少地一次編寫并在任何地方運(yùn)行,而不用支付一分錢。

現(xiàn)在的情況,似乎變得更加不明朗。甲骨文的許多Java版本都是免費(fèi)的,但有些需要奇怪的條款授權(quán)??雌饋砑坠俏南M绦騿T享受創(chuàng)建的自由,不受金錢限制,但也希望從那些從Java中獲得大量長(zhǎng)期收入的企業(yè)中提取稅收或租金。事實(shí)上,甲骨文通過所謂的Java訂閱功能來進(jìn)行收費(fèi)。

可以這樣說,Java現(xiàn)在仍然是免費(fèi)的,除非你想升級(jí)它用于商業(yè)用途。

圖片圖片

原文鏈接:https://www.infoworld.com/article/3711866/11-reasons-the-new-java-is-not-like-the-old-java.html

責(zé)任編輯:武曉燕 來源: 51CTO技術(shù)棧
相關(guān)推薦

2013-03-28 11:04:36

桌面虛擬化

2013-03-19 12:48:31

VDI桌面虛擬化網(wǎng)絡(luò)虛擬化

2021-07-28 09:29:01

C++編程語言TIOBE

2019-04-11 08:40:05

Adobe 軟件平臺(tái)

2015-05-26 09:57:33

2009-04-13 15:29:49

COBOL編程語言商業(yè)語言

2014-04-14 10:25:31

亞馬遜

2018-01-18 22:02:29

混合云云計(jì)算多云

2010-08-17 09:06:06

IE瀏覽器

2015-09-23 13:50:53

SDN發(fā)展史

2009-10-21 10:43:41

綜合布線市場(chǎng)

2019-03-12 09:14:38

瀏覽器 Chrome Google

2009-01-12 09:25:04

SaaS云計(jì)算SOA

2012-04-18 10:24:48

RFID

2015-12-28 10:21:45

2023-04-21 18:59:33

2011-10-28 16:13:24

Office 2003比爾蓋茨

2017-12-19 15:17:18

OpenStackEasyStack

2015-02-09 19:49:19

暢捷通
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)