Java 9 – 終極特性列表
本文會根據針對即將釋出的Java 9新特性做同步更新(最後更新:9/9/2014)
加快OpenJDK的開發速度: 繼2014年3月份釋出了Java 8之後,我們進入下一個兩年的釋出週期. Java 9預計在2016年釋出,並且已經公佈了JEP(JDK改進提議)中的前期列表.同時,我們已經把一些新特性整理到了JSR(Java規範請求),還有提出了一些希望包括在新版本中的其他特性.
這些重要的特性都包括在Jigsaw專案中。顯著的效能改善和期待已久的API包括:程式API更新,JSON將成為java.util的一部分,貨幣處理API.對於想處在技術最前沿的你,可從這裡獲得Java 9的初期版本.
本文將根據Java 9的新特性做持續更新。敬請關注!
1. Jigsaw 專案;模組化原始碼
Jigsaw專案是為了模組化Java程式碼、將JRE分成可相互協作的元件,這也是Java 9 眾多特色種的一個。JEP是邁向Jigsaw四步中的第一步,它不會改變JRE和JDK的真實結構。JEP是為了模組化JDK原始碼,讓編譯系統能夠模組編譯並在構建時檢查模組邊界。這個專案原本是隨Java 8釋出的,但由於推遲,所以將把它加到Java 9.
一旦它完成,它可能允許根據一個專案需求自定義元件從而減少rt.jar的大小。在JDK 7 和JDK 8的rt.jar包中有大約20,000個類,但有很多類在一些特定的環境裡面並沒有被用到(即使在Java 8的緊湊分佈特性中已經包含了一部分解決方法也存在著類冗餘)。這麼做是為了能讓Java能夠容易應用到小型計算裝置(比如網路裝置)中,提高它的安全和效能,同時也能讓開發者更容易構建和維護這些類庫。
更多JEP 201內容
2. 簡化程式API
截止到目前,Java控制與管理系統程式的能力是有限的。舉個例子,現在為了簡便獲取你程式的程式PID,你要麼呼叫本地程式要麼要自己使用一些變通方案。更多的是,每個(系統)平臺需要有一個不同實現來確保你能獲得正確的結果。
期望程式碼能獲取Linux PIDS,現在是如下方式:
public static void main(String[] args) throws Exception { Process proc = Runtime.getRuntime().exec(new String[]{ "/bin/sh", "-c", "echo $PPID" }); if (proc.waitFor() == 0) { InputStream in = proc.getInputStream(); int available = in.available(); byte[] outputBytes = new byte[available]; in.read(outputBytes); String pid = new String(outputBytes); System.out.println("Your pid is " + pid); } }
在Java 9中,可以變換成如下方式(支援所有的作業系統):
System.out.println("Your pid is " + Process.getCurrentPid());
這次更新將會擴充套件Java與作業系統的互動能力:新增一些新的直接明瞭的方法去處理PIDs,程式名字和狀態以及列舉多個JVM和程式以及更多事情。
3. 輕量級 JSON API
目前有多種處理JSON的Java工具,但JSON API 獨到之處在於JSON API將作為Java語言的一部分,輕量並且運用Java 8的新特性。它將放在java.util包裡一起釋出(但在JSR 353裡面的JSON是用第三方包或者其他的方法處理的).
**程式碼例子稍後列出!
4. 錢和貨幣的API
在Java 8引進了日期和時間的API之後, Java 9引入了新的貨幣API, 用以表示貨幣, 支援幣種之間的轉換和各種複雜運算. 關於這個專案的具體情況, 請訪問https://github.com/JavaMoney,裡面已經給出了使用說明和示例, 以下是幾個重要的例子:
//新的型別: Money & FastMoney Money amt1 = Money.of(10.1234556123456789, "USD"); // Money is a BigDecimal FastMoney amt2 = FastMoney.of(123456789, "USD"); // FastMoney is up to 5 decimal places Money total = amt1.add(amt2);
// 錢表達成各國貨幣的方法: MonetaryAmountFormat germanFormat = MonetaryFormats.getAmountFormat( Locale.GERMANY); System.out.println(germanFormat.format(monetaryAmount)); // 1.202,12 USD
5. 改善鎖爭用機制
鎖爭用是限制許多Java多執行緒應用效能的瓶頸. 新的機制在改善Java物件監視器的效能方面已經得到了多種基準(benchmark)的驗證, 其中包括Volano. 測試中通訊伺服器開放了海量的程式來連線客戶端, 其中有很多連線都申請同一個資源, 以此模擬重負荷日常應用.
通過諸如此類的壓力測試我們可以估算JVM的極限吞吐量(每秒的訊息數量). JEP在22種不同的測試中都得到了出色的成績, 新的機制如果能在Java 9中得到應用的話, 應用程式的效能將會大大提升.
6. 程式碼分段快取
Java 9的另一個效能提升來自於JIT(Just-in-time)編譯器. 當某段程式碼被大量重複執行的時候, 虛擬機器會把這段程式碼編譯成機器碼(native code)並儲存在程式碼快取裡面, 進而通過訪問快取中不同分段的程式碼來提升編譯器的效率.
和原來的單一快取區域不同的是, 新的程式碼快取根據程式碼自身的生命週期而分為三種:
- 永駐程式碼(JVM 內建 / 非方法程式碼)
- 短期程式碼(僅在某些條件下適用的配置性(profiled)程式碼)
- 長期程式碼(非配置性程式碼)
快取分段會在各個方面提升程式的效能, 比如做垃圾回收掃描的時候可以直接跳過非方法程式碼(永駐程式碼), 從而提升效率.
7. 智慧Java編譯, 第二階段
智慧Java編譯工具sjavac的第一階段開始於JEP 139這個專案, 用於在多核處理器上提升JDK的編譯速度. 現在這個專案已經進入第二階段(JEP 199), 目的是改進sjavac並讓其成為取代目前JDK編譯工具javac的Java預設的通用編譯工具.
其他值得期待的內容:
8. HTTP 2.0客戶端
HTTP 2.0標準雖然還沒正式釋出, 但是已經進入了最終審查階段, 預計可以在Java 9釋出之前審查完畢. JEP 110將會重新定義並實現一個全新的Java HTTP客戶端, 用來取代現在的HttpURLConnection, 同時也會實現HTTP 2.0和網路介面(原文websockets). 它現在還沒被JEP正式認可但我們希望在Java 9中包含這一專案的內容.
官方的HTTP 2.0 RFC(Request for Comments, 官方技術討論/會議記錄等等的一系列文件記錄)預訂於2015年2月釋出, 它是基於Google釋出的SPDY(Speedy, 快速的)協議. 基於SPDY協議的網路相對於基於HTTP 1.1協議的網路有11.81%到47.7%之間的顯著提速, 現在已經有瀏覽器實現了這個協議.
9. Kulla計劃: Java的REPL實現
這個取名為Kulla的專案最近宣佈將於2015年4月整合測試, 雖然已經不太有希望能趕上Java 9的釋出, 但如果進度快的話或許剛好能趕上. 現在Java並沒有來自官方的REPL(Read-Eval-Print-Loop)方式, 也就是說現在如果你想要跑幾行Java程式碼做一個快速的測試, 你仍然需要把這幾行程式碼封裝在專案或者方法裡面. 雖然在一些流行的IDE裡面有Java REPL工具, 但它們並沒有官方支援, 而Kulla專案或許就能成為Java官方釋出的REPL解決方案.
這些新功能出自何處?
JEP和JSR並不是無中生有, 下面就介紹一下Java發展的生態環境:
小組 - 對特定技術內容, 比如安全, 網路, Swing, HotSpot, 有共同興趣的組織和個人
專案 - 編寫程式碼, 文件以及其他工作, 至少由一個小組贊助和支援, 比如最近的Lambda計劃, Jigsaw計劃和Sumatra計劃.
JDK改進提案(JEP) - 每當需要有新的嘗試的時候, JEP可以在JCP(Java Community Process)之前或者同時提出非正式的規範(specification). 被正是認可的JEP正式寫進JDK的發展路線圖並分配版本號.
Java規範提案(JSR) - 新特性的規範出現在這一個階段, 可以來自於小組 / 專案, JEP, JCP成員或者Java社群(community)成員的提案. 每個Java版本都由相應的JSR支援, Java 9暫時還沒有.
原文地址:http://www.takipiblog.com/java-9-the-ultimate-feature-list/
相關文章
- Java 8 新特性終極版Java
- Java面試題和答案——終極列表(上)Java面試題
- 115個Java面試題和答案——終極列表(上)Java面試題
- 115個Java面試題和答案——終極列表(下)Java面試題
- Java 9特性Java
- Java日誌終極指南Java
- 關於Spring的69個面試問答——終極列表Spring面試
- JAVA9新特性(一)Java
- Java 9 的新特性發布Java
- Java面試必問,ThreadLocal終極篇Java面試thread
- Java面試必問-死鎖終極篇Java面試
- mac下終極好用的shell,終極shellMac
- 開心檔之Java 9 新特性Java
- Java9有哪些新特性?Java
- Java面試必問:ThreadLocal終極篇 淦!Java面試thread
- Java9新特性系列(JShell)JavaJS
- Java 9新特性解讀,等你來看Java
- Oracle 宣佈更多的 Java 9 新特性OracleJava
- Oracle宣佈更多的Java 9 新特性OracleJava
- Java8 和 Java9 的主要新特性Java
- Java9新特性系列(Stream改進)Java
- Java9新特性系列(module&spi)Java
- Java9的新特性的總結Java
- Java學習必備書籍推薦終極版!Java
- Java面試通關要點彙總集【終極版】Java面試
- Angular CLI 終極指南Angular
- 終極戰爭模型(轉)模型
- Java9新特性系列(module&maven&starter)JavaMaven
- Java9模組化特性及工具探討Java
- Go Modules 終極入門Go
- SSLStrip 終極版 —— location 劫持
- nmap終極使用指南
- A/B測試終極指南
- Photoshop:路徑終極教程
- ChatGPT的終極指南概要ChatGPT
- Java 8 的重要新特性以及 Java 9、10 的發展規劃Java
- Java9新特性系列(深入理解模組化)Java
- DBeaverUltimate for Mac v23.3.1終極版:終極資料庫管理解決方案Mac資料庫