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

改變Java的12項Java增強提案(JEP)

譯文 精選
開發(fā) 前端
讓我們來了解一下旨在重構(gòu)JVM和擴展Java語言的最新提案。

譯者 | 晶顏

審校 | 重樓

Java的內(nèi)部系統(tǒng)和語法在不斷發(fā)展,這些變化主要是通過Java社區(qū)進程(JCP)和Java增強提案(JEPs)來實現(xiàn)的。JCP和JEP共同定義了描述、設(shè)計和引入JVMJava虛擬機)新特性的路徑。它們保持了Java語言和平臺的動態(tài)性和社區(qū)的參與性。隨著JDK 24發(fā)布日期的臨近,現(xiàn)在是時候看看即將到來的JEP是如何完成這一進程的。

JEP進程的各個階段

可以在OpenJDK主頁上查看JEP索引,獲取所有JEP的目錄,包括過去和現(xiàn)在提交給Java的JEP。概括來說,JEP是根據(jù)其發(fā)展階段進行組織的

  • 正在運行的JEP(In-flight JEPs是目前正在研究的提案,將包含在Java的未來版本中。這包括從預(yù)覽和可用于實驗的提案到最近被接受用于開發(fā)的提案的所有內(nèi)容。這個集合中的所有提案都已經(jīng)經(jīng)過了審查,并且很可能在未來的Java版本中出現(xiàn)。
  • 提交的JEP(Submitted JEPs已經(jīng)完成了創(chuàng)建過程,現(xiàn)在已經(jīng)正式提交,但尚未被接受。一旦們被接受,將進入In-flight階段。
  • JEP草案Draft JEPs是正在制定的提案,以便進入準(zhǔn)備正式提交的狀態(tài)。當(dāng)這種情況發(fā)生時,它們將上升到Submitted JEPs狀態(tài)。
  • 交付的功能、基礎(chǔ)設(shè)施和信息性JEP(informational JEPs都是過去成功的JEP,它們已經(jīng)成為JVM的一部分。有些甚至已經(jīng)交付,然后由進一步的JEP進行改進。
  • 撤回的JEP(Withdrawn JEPs是指沒有成功而被撤回提案。

你可能還會注意到索引開頭的進程JEP(Process JEP)。這些是幫助理解和定義進程本身的程序JEP

有時候,較大的JEP會被分解成多個部分或階段。例如,JEP 462:結(jié)構(gòu)化并發(fā)(第二次預(yù)覽版)在交付的功能集中有一個單獨的條目。

目前最著名的In-flight JEP

目前有許多有趣的JEP正在開發(fā)中。下述所強調(diào)的主要是旨在調(diào)優(yōu)和重構(gòu)JVM以及擴展和增強語言的提案。

JEP 485:流收集器

流收集器Stream Gatherers使函數(shù)操作更具可定制性。流收集器API公開了一個稱為收集器的低級操作符接口,開發(fā)人員可以使用收集器對流進行以前很難或不可能的操作,比如處理同構(gòu)集合類型。

JEP 485提案是先前兩輪預(yù)覽——在JDK 23中交付的JEP 473以及在JDK 22中交付的JEP 461的更新版。該功能旨在增強 Stream API,使其能夠支持自定義中間操作,讓流式管道能夠以一種不易通過現(xiàn)有內(nèi)置中間操作實現(xiàn)的方式轉(zhuǎn)換數(shù)據(jù)。

流收集器雖非每天都需要的功能,但當(dāng)需要它的時候,它是很棒的。它把一個令人沮喪的邊緣情況變成了一個簡單的解決方案。

JEP 484:類文件API

類文件(Class-FileAPI針對的是庫和框架開發(fā)人員,他們需要用額外的功能修飾Java程序的編譯輸出。這是Java中一個長期存在的方法。Java生態(tài)系統(tǒng)中有許多用于此類開發(fā)的工具,但是JDK的快速變化使得采用更加標(biāo)準(zhǔn)化的方法變得非常重要。

類文件API是用于解析、操作和輸出框架或庫的.class結(jié)構(gòu)的標(biāo)準(zhǔn)機制。然后,其他開發(fā)人員工具(以及JDK本身)便可以在提供的輸出上進行構(gòu)建。

JEP 478:密鑰派生函數(shù)API(預(yù)覽)

JEP 478改進并擴展了Java處理密鑰和哈希等加密元素的原生能力。它旨在使這些操作更加強大,包括前瞻性能力,以幫助抵御未來的量子計算攻擊。

涉及密碼學(xué)的開發(fā)人員將使用密鑰派生函數(shù)Key Derivation FunctionAPI來處理諸如使用Argon2等高級算法的散列密碼之類的事情。JEP 478升級了Java的內(nèi)置加密支持,并為未來幾年提供了更好的定位。

JEP 478目前是一個預(yù)覽提案,這意味著它在成為官方功能之前可能還有一段路要走。

JEP 472:準(zhǔn)備限制JNI的使用

作為巴拿馬項目(Project Panama用外部函數(shù)內(nèi)存API取代JNI的一部分,JEP 472表明JVM正在棄用Java本機接口。這個提案提醒了應(yīng)用程序開發(fā)人員,JNI將在默認(rèn)情況下受到限制。這個JEP關(guān)注的是使JNI和FFM API更加一致和安全。使用JNI或FFM的開發(fā)人員將受到此更改的影響,因為它要求顯式啟用這些特性,如果未啟用則會發(fā)出警告。

JEP 468:派生記錄創(chuàng)建(預(yù)覽)

JEP 468提案通過派生創(chuàng)建記錄來增強Java語言。由于記錄是不可變的對象,開發(fā)人員經(jīng)常會根據(jù)舊記錄創(chuàng)建新記錄,以建立新數(shù)據(jù)模型。派生創(chuàng)建可從現(xiàn)有記錄派生出新記錄,只需指定不同的組件即可,從而簡化代碼編寫。

該提案的作者提供了一個例子,將現(xiàn)有的Point實例(nextLoc)在新的finalLoc實例中進行擴展

Point finalLoc = nextLoc with { 
 x *= 2; 
 y *= 2;
 z *= 2;
};

本例中的Point類引用一個三維整數(shù)記錄。這消除了向Point類添加鏈接方法的需要。下面是使用鏈接的例子:

Point finalLoc = nextLoc
 with { x *= 2; }
 with { y *= 2; }
 with { z *= 2; };

總的來說,JEP是對記錄功能的一個很好的補充。

JEP 198:輕量級JSON API

JEP 198中提出的功能備受開發(fā)人員青睞。處理JSON是現(xiàn)代編程中無法繞過的一個事實,它無處不在,而且有很好的存在理由。在JavaScript中使用JSON非常容易,而在Java中則需要第三方庫。有時,這些API并不容易使用。

不幸的是,JEP 198起源于2014年,自2017年以來一直沒有更新。這是一個有價值的JEP例子,它處于運行狀態(tài),但卻并非得到有效改進。希望未來能有更積極的發(fā)展。

JEP 479:移除Windows 32位x86端口

JDK 21已通過JEP 479完成了棄用32位Windows工作。一旦該提案成為Java的一部分,Java平臺將不再支持32位窗口。JEP描述了刪除這些代碼路徑將如何簡化JVM。

JEP 218:原始型上的泛型

Java 泛型的早期妥協(xié)之一是泛型的類型變量只能用引用類型實例化,而不能使用原始類型。這既不方便(當(dāng)想使用 List<int> 時只能用 List<Integer>),又很昂貴(裝箱有性能開銷)。

作為Valhalla項目的一部分,JEP 218是在泛型中使用原始的能力。這是對基本Java語法的重大改進,意味著大量的內(nèi)部規(guī)劃和重構(gòu)。統(tǒng)一泛型和原語意味著我們擺脫了原語包裝和(自動)裝箱。這為徹底統(tǒng)一原語和對象以及引入值類型掃清了道路,且將是很長一段時間以來我們編寫Java方式的最大變化。

JEP 483提前類加載和鏈接

JEP 483是JVM團隊致力于改進Java底層行為的一個很好的例子。最終的結(jié)果是一個更好的平臺一個啟動和重新加載更快的平臺。

總體思路是,JVM增加了快速加載類的方法,同時保留了其他領(lǐng)域的動態(tài),從而加快了啟動和預(yù)熱時間。應(yīng)用程序開發(fā)人員不需要做任何特別的事情來利用這個特性;在即將發(fā)布的HotSpot JVM版本中,我們將免費獲得它。

JEP 475: G1延遲屏障擴展

與JEP 483一樣,JEP 475也是一種重構(gòu),應(yīng)用程序開發(fā)人員不會直接使用它。相反,它為實現(xiàn)垃圾收集例程的平臺開發(fā)人員提高了HotSpot JVM的性能和可訪問性。

該JEP建議將G1垃圾收集器的屏障擴展從C2 JIT編譯器的早期階段推遲到后期階段,以此來簡化G1垃圾收集器屏障的實現(xiàn)。這些屏障記錄了有關(guān)應(yīng)用程序內(nèi)存訪問的信息。目標(biāo)是在使用G1收集器時減少C2的執(zhí)行時間,這對于使Java成為更強大的云平臺至關(guān)重要。

JEP 450:壓縮對象頭(實驗)

作為另一個內(nèi)部性能改進提案,JEP 450旨在減少Java對象在內(nèi)存中的大小。實際測試表明,對象占用的堆空間大部分是對象頭數(shù)據(jù)。這意味著,將每個對象的標(biāo)頭從96位減少到64位可以把總體堆使用量提高10%以上,因為標(biāo)頭是每個對象的固定成本。較小的平均對象大小可以改善內(nèi)存使用、GC壓力和數(shù)據(jù)局部性。

這是另一個受歡迎的內(nèi)部重構(gòu),我們可以期待它無聲地改進我們程序的運行方式。

JEP 111:正則表達(dá)式的附加Unicode結(jié)構(gòu)

JEP 111擴展了正則表達(dá)式可以處理的字符類型,涵蓋了更多的Unicode技術(shù)標(biāo)準(zhǔn)。具體來說,它添加了以下可以在字符串中處理字符類型

  • Unicode名稱屬性\N \{…\}
  • 擴展Grapheme Clusters:\X
  • Unicode換行序列,如TR#18 Line Boundaries\R
  • Perl風(fēng)格的命名捕獲組和捕獲組結(jié)構(gòu):\g \{…\}
  • 更完整的Unicode屬性,如\p \{IsXXXX\}
  • 水平/垂直空白\h \H \v \V

結(jié)語

本文只探討了一些調(diào)優(yōu)和重構(gòu)JVM以及擴展和增強Java語言的提案,其他還有很多正在運行以及處于草案階段的JEP提案。有興趣的話,可以自行查看索引,以更好地了解Jave系統(tǒng)。

原文標(biāo)題:12 Java Enhancement Proposals changing Java,作者:Matthew Tyson


責(zé)任編輯:華軒 來源: 51CTO
相關(guān)推薦

2013-05-27 10:46:05

移動互聯(lián)網(wǎng)自動化物聯(lián)網(wǎng)

2015-08-13 10:31:18

Java 9新功能

2023-04-19 15:30:00

OpenJDKJava

2013-05-27 09:36:03

移動互聯(lián)網(wǎng)物聯(lián)網(wǎng)云計算

2023-10-18 11:12:01

增強現(xiàn)實VR

2021-07-09 08:00:00

科技增強現(xiàn)實虛擬現(xiàn)實

2023-09-18 10:04:46

增強現(xiàn)實VR

2023-05-04 14:48:25

AR

2017-01-15 17:15:27

Java基本功能

2022-10-25 16:36:03

機器學(xué)習(xí)深度學(xué)習(xí)數(shù)據(jù)集

2022-11-24 14:07:48

元宇宙VR

2021-06-16 07:33:56

JavaLTSJava 17

2013-06-28 14:38:02

2023-07-09 09:23:46

Java 21編程

2009-10-14 11:14:38

ScitterScalaTwitter

2013-07-01 09:50:24

Windows 8.1

2012-06-29 09:52:42

2012-06-28 11:26:22

2020-08-03 09:47:05

物聯(lián)網(wǎng)智慧城市技術(shù)

2024-12-24 11:10:40

點贊
收藏

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