Java 20中有哪些新功能? - symflower
Java 20將於2023年3月釋出,預計將引入一系列變化和新功能。我們準備了一個先睹為快,看看哪些JEP最有可能被JDK 20接受,哪些JEP我們很有希望下一個被接受!
Java 20是計劃作為一個非LTS版本,而隨後的版本21將被設定為一個具有長期支援(LTS)的版本。
Java開發工具包(JDK)的開發基於JDK增強建議(JEP)的概念。實際上,這些增強建議是JDK釋出專案和所有相關開發活動的路線圖。
在編寫本報告時,JEP索引列出了437項改進建議,以及一些JEP草案和已提交的JEP。
JDK 20中需要哪些JEP?
1、記錄模式
作為JDK 19中的第一個預覽引入,並預期作為JDK 20中的第二個預覽。為了支援資料導航和處理,記錄模式簡化了與記錄元件的使用。在不更改型別模式的語法或語義的情況下,這將擴充套件更復雜資料查詢的模式匹配。
2、switch語句的模式匹配
作為JDK 17中的第一個預覽版引入,並預期作為JDK 20中的第四個預覽版。
switch (s) { case null -> { break; } case Triangle t when t.calculateArea() > 100 -> System.out.println("Large triangle"); default -> System.out.println("A shape, possibly a small triangle"); } |
3、外部函式&記憶體(FFM)API
FFM API的根源在於廣泛的JEP組合,這導致了它在JDK 19中的第一個預覽版,並有望在JDK 20中成為第二個預覽版。它允許呼叫Java程式的外部函式,以與外部程式碼和資料一起操作,例如在Java執行時之外,而沒有JNI的缺點和風險。FFM API的主要目標是擁有一個上級的純Java開發模型,並支援更廣泛的外部記憶體模型。
4、虛擬執行緒
作為JDK 19中的第一個預覽引入,並預期作為JDK 20中的第二個預覽。虛擬執行緒可提高編寫、維護和監視併發應用程式時的效率。它們是輕量級的,支援每個請求的執行緒可伸縮性,並且可以在對現有程式碼進行最小更改的情況下應用。傳統的Java執行緒精確地對映到一個作業系統執行緒,而虛擬執行緒並不繫結到特定的作業系統執行緒。因此,建立它們的成本很低,並且可以根據需要建立任意多個。
JDK20釋出後,哪些JEP令我們興奮
1、基元類primitive
JEP 401引入了對一種新的特殊型別的值類的支援,以定義基元型別。由於更好的儲存器訪問以及因為在CPU內更有效地執行基元操作,基元的使用使得能夠改進效能。透過此更新,開發人員可以獲得基元的效能優勢,同時保留類宣告的抽象和其他優勢。
為了能夠將基元的優點與典型的物件導向結合起來,基元類需要遵守以下兩條規則:
- 原始類中的所有欄位都被隱式定義為final,即它們只能在建構函式或初始化函式中設定。
- 此外,基元類不能具有隱式依賴於宣告類的欄位。
primitive class Point implements Shape { ... } |
2、值物件
傳統的Java物件提供標識,即它們的記憶體位置用於區分一個物件和另一個物件。提供標識在執行時代價很高,而且通常不會在實現中使用。透過這次提交,Java的物件模型擴充套件了值類和值物件。值類是無標識的,即它們可以提供基元型別的效能優勢,同時利用物件導向的概念。當在值物件上使用==時,它們的欄位值用於確定物件是否相等,而不是它們的記憶體位置。請注意,值類的所有欄位都是隱式final的,需要在初始化器或建構函式中設定!
實值類使用value,例如:
value class Point implements Shape { ... } |
3、Universal generics通用泛型
此提交透過還允許原始類作為型別引數,消除了型別引數必須是引用型別的要求。許多現有的泛型實現將開箱即用地使用這個新增功能,即它們可以用原始類作為其型別引數來例項化。但是,需要特別注意,以防程式碼對 null 進行賦值,因為原始類將因空指標異常而失敗。
4、字串模板
為了簡化常規字串組合,字串模板(又名字串文字)包含在執行時解釋的嵌入式表示式。透過向 Java 新增一種新的表示式(字串模板表示式),JEP 430使得使用包含在執行時計算的值的字串編寫程式碼變得更加簡單。這使得需要使用者輸入值的程式具有更好的可讀性、定義格式語法的靈活性以及更高的安全性。
多執行緒程式碼的補充
如果您正在使用多執行緒程式碼,請確保檢查這些新增項,它們提供了使多執行緒程式碼更易於閱讀或提供效能提升的選項。
1、Scoped values
使用 extent-local 變數,可以更容易地在 Java 中的執行緒內和子執行緒之間共享不可變資料。此更新的目標是簡化關於資料流的推理以提高可用性;提高健壯性,以便只有合法的被呼叫者才能檢索呼叫者共享的資料;並透過啟用執行時最佳化和將共享資料視為不可變來提高效能 雖然此更改不需要從執行緒區域性變數遷移,但它們更適合用於大量虛擬執行緒。
2、結構化併發
透過引入用於結構化併發的 API, JEP 428可以將在不同執行緒中執行的不同任務視為一個工作單元。這應該大大簡化多執行緒程式設計,並透過更容易確保程式碼的可靠性、可維護性和可觀察性來鼓勵開發人員應用併發程式設計。
更多令人興奮的 JEP
- Sequenced collections:將 SequencedCollection 介面新增到標準庫,提供第一個定義集合中元素順序的集合。
- Vector API:與標量計算相比,為了提高效能,這個新的 API 支援在執行時編譯向量計算。
- 非同步堆疊跟蹤 API:引入了一個用於非同步收集堆疊跟蹤的新 API。
- 類檔案 API:新增一個新的 API 來替換 ASM(或 cglib,或其他位元組碼庫),它將提供一種讀取、寫入和轉換 Java 類檔案的方法。
相關文章
- Node.js 21中有哪些最新功能?Node.js
- Java 20 新功能介紹Java
- java中有哪些基本註解Java
- java反射中有哪些APIJava反射API
- python中有哪些包Python
- Innodb中有哪些鎖?
- python集合中有哪些方法Python
- Spring Boot 2.2中有什麼新功能? - oioSpring Boot
- js中有哪些書寫位置JS
- Java中有關stringJava
- 【Java面試】Spring中有哪些方式可以把Bean注入到IOC容器?Java面試SpringBean
- js 中有哪些拷貝的方式JS
- Object中有哪些公共方法及作用Object
- .NET 8.0 中有哪些新的變化?
- 你知道SQLite中有哪些約束嗎?SQLite
- 分散式系統中有哪些快取?分散式快取
- php中有哪些迴圈控制語句PHP
- C#12新功能有哪些?C#
- Spring Modulith 1.3 有哪些新功能?Spring
- java中有哪些併發的List?只知道一種的就太遜了Java
- 使用Java新功能StackWalkerJava
- 收藏,Python 開發中有哪些高階技巧?Python
- Linux中有哪些好用的虛擬機器?Linux虛擬機
- 探究專案管理中有哪些執行策略?專案管理
- Java 18 新功能介紹Java
- Java 16 新功能介紹Java
- 大資料在製造業中有哪些作用大資料
- volatile關鍵字在併發中有哪些作用?
- 搶先看!iOS14都有哪些新功能iOS
- 最新版的MindManager 有哪些新功能
- 12個蘋果iOS 12新功能彙總!iOS12新功能有哪些?蘋果iOS
- Java 23:新功能正式公佈Java
- Java 8 後的新功能梳理Java
- Java 17 新功能介紹(LTS)Java
- Vue3 中有哪些值得深究的知識點?Vue
- 網路安全中有哪些常見的欺騙方式?
- Python程式碼編寫過程中有哪些重要技巧?Python
- 團隊協作中有哪些必不可少的工具?