Java9新特性


轉載:http://blog.csdn.net/qq_32524177/article/details/77014757

寫在前面的話:Java9來了,搜索了很多關於Java9的新特性,但文獻不多,特翻譯這篇概括性比較強的官方文章以供參考,本人英文水平有限,雖力求每個詞語准確,但必然會有一些偏差,請海涵糾正,,詳細的更新內容請點擊超鏈接。

     在java9中發布了哪些大家期待的令人振奮的新特性呢?

不要因為java9發布前的相對平靜就不關注它!JDK的核心代碼提交者們正在努力地為下個版本的發布做准備,這個版本預計於2017年9月就可以被普遍使用。

    早期的可訪問項目構建(access builds)已經隨處可見,現在我們正通過"Java9倒計時網"為能夠獲取這個版本倒計時.

    現在我們能夠獲得一張相當清晰的,我們能期望在java9中出現的新特性藍圖.如果Java8能被描述成主要是Lambda表達式、數據流和API變更的發布版本,那么java9主要是Jigsaw(The primary goals of this Project are to:Make the Java SE Platform, and the JDK, more easily scalable down to small computing devices;Improve the security and maintainability of Java SE Platform Implementations in general, and the JDK in particular;Enable improved application performance; and Make it easier for developers to construct and maintain libraries and large applications, for both the Java SE and EE Platforms.To achieve these goals we propose to design and implement a standard module system for the Java SE Platform and to apply that system to the Platform itself, and to the JDK. The module system should be powerful enough to modularize the JDK and other large legacy code bases, yet still be approachable by all developers.)、jshell(我們在運行簡單代碼時不用再寫main方法了)以及一系列的高級選項和API更新。在這次發布中我們搜集了一些我們認為會是Java9中最讓人振奮的特性--除了最常見的猜想之外,Jigsaw項目承載着拆分Java運行環境並且使Java的核心組件更加的模塊化。
   以下是一些必須了解的Java9的特性,其中一些已經在早期發布的版本能夠讓你隨意修補。

    1.Java+REPL=Jshell(ps:R(read)、E(evaluate)、P(print)、L(loop)顧名思義:讀取,計算,打印,循環-交互式解釋器環境 )

    是的,先前我們還在懷疑kulla(這個項目的目的是調查在java編程語言的REPL工具的產物是否如同在java優化提案中描述的那樣)項目能否及時完成為Java9的任務(為java9提供jshell服務)但是現在
它已經獲得官方的認可。下個版本的java會重點推出一個被稱為Jshell的命令行工具,使得java對REPL原生支持並且更加的通俗化。意思就是說,舉個例子,如果你想讓一些短短數行的java代碼自己運行起來,
你不用再將他們包裝成單獨的項目或者方法。哦,對了,還有分號,你可忘記它們了:
-> 2 + 2
| Expression value is: 4
|     assigned to temporary variable $1 of type int
 (對於REPL)現在有很多很多的替代選擇,比如一些流行開發工具的REPL插件或者像JAVA REPL web控制台這樣的解決方案,但是到目前為止都沒有正確的並且官方的方式來處理它。Jshell已經在先前發布的版 本中可用了,它正等着你給他一個測試運行。
     2.值得注意的API更新:並發和棧遍歷
     做為這次更新的一部分,我們希望在這次更新發布以后有額外的、覆蓋廣泛的特性。
在這里我們想提及的最重要的事就是Java9並發性api基於CompletableFuture(1.8以后才有的interface,繼承自java.util.concurrent.Future,沒用過,大概的意思就是當你不需要或者不想立馬獲取某個計算的結果時,我們使用FUture對象來"占位"等待計算完成)和java.util.concurrent.Flow類的更新。Flow是響應式流API的實現,我們非常開心的是它來到了java。響應式流解決了背壓之痛(在rxjava中會經常遇到一種情況就是被觀察者發送消息太快以至於它的操作符或者訂閱者不能及時處理相關的消息。那么隨之而來的就是如何處理這些未處理的消息)。當傳入任務率高於應用本身的處理能力來處理數據時,數據的內建產生,這會為未處理的數據產生一個緩沖區。作為並發更新的一部分,CompletableFuture類也會獲得一次更新,這次更新會解決自Java8對他們的介紹后發出的抱怨。這次更新包括支持延時和超時,更好的支持子類化以及增加了一些實用的方法。
   在這里我們想提及的第二件事就是棧遍歷API。是的,Java9會改變你遍歷棧追蹤(StackTrace)的方式.從根本上來說,這是一個Java官方的處理棧追蹤的方式,而不是僅僅把它們當做純文本來處理。這聽起來有點像一份模糊的"星球大戰"計划參考,讓我們對它愛不釋手。
   3.G1將成為新的默認GC
   Java僅有一個垃圾收集器是我們經常聽到的最普遍的誤解,但事實上它有4個。在J9之前,默認的垃圾回收器是'Parallel / Throughput Collector',但是現在它被我們在Java7中介紹過的G1取代了。
想了解這些GC之間的部分差別,請點擊這里
一般來說,G1被設計出來是為了更好的支持4GB以上的堆內存以及眾所周知的減少頻繁的GC暫停,但當有GC暫停時,這個停頓時間會比以前更長。同時我們也和Next Insurance的主觀Haim Yadid討論了關於GC的所有事,希望可以幫你了解更多關於如何在不同GC之間權衡

  4.HTTP2.0是未來的發展趨勢

   官方的基於谷歌SPDY(應用層協議)算法的HTTP2.0請求注解在不久前通過了審核。SPDY已經展現出了相較於HTTP1.1較大的速度提升,提升率介於11.81%-47.7%之間,同時在大多數現代瀏覽器中已經有它的實現。
J9將會全面地支持HTTP2.0並且為Java形成新的HTTP客戶端,這會替代HttpURLConnection同時實現HTTP2.0和web套接字.另外一件關於這個API的酷事是,它將被作為Java中的'第一個孵化器模塊'介紹給大眾。
孵化器模塊事實上是一個實驗性的特性,或許它將發展到被下個版本的Java采用,也就是說Java10,或許就被移除了。這是一個非同尋常的Java理念,它在促進實驗的同時並不破壞向后兼容性。

  5.進程類API得到了巨大的推進(Process 類,抽象類,提供了執行從進程輸入、執行輸出到進程、等待進程完成、檢查進程的退出狀態以及銷毀(殺掉)進程的方法)

    迄今為止,java在控制和管理操作系統進程方面的能力是有局限性的。舉個栗子,在早期版本的Java中為了做一些簡單如獲取你的進程的PID,你可能需要訪問本地代碼或者使用一些非同尋常的方式。此外,它還要求對於不同的平台有不同的實現,以確保你獲得的結果是正確的。
    在JAVA9中,預期的獲取Linux進程ID的代碼看起來是這樣的:

[java] view plain copy
  1. public static void main(String[] args) throws Exception {  
  2.     Process proc = Runtime.getRuntime().exec(new String[] {  
  3.       "/bin/sh",  
  4.        "-c",  
  5.        "echo $PPID"  
  6.     });  
  7.   
  8.   
  9.     if (proc.waitFor() == 0) {  
  10.       InputStream in = proc.getInputStream();  
  11.       int available = in.available();  
  12.       byte[] outputBytes = new byte[available];  
  13.   
  14.   
  15.       in.read(outputBytes);  
  16.       String pid = new String(outputBytes);  
  17.   
  18.       System.out.println("Your pid is " + pid);  
  19.     }  
  20. }  



    現在它變成了這樣(這適用於所有的操作系統):

[java] view plain copy
  1. System.out.println("Your pid is " + Process.getCurrentPid());  


    這次更新會將Java的能力延伸到和操作系統之間相互作用:
新增直接處理PIDS,進程名和狀態的方法以及枚舉JVM和進程的能力等等。這對於一些人來說可能不是特別令人興奮,但是對於OverOps上的我們來說可能會廣泛地使用它,因此,
這就是為什么我們考慮在其他的特性在中高亮標注它。

   6.產品調試

    除了Java9本身以外,我們認為這次發布會成為一次分享一些我們所取得的新進步的機會。解決產品中的錯誤一直以來都是一個麻煩的事情,在海量的日志文件中尋找線索,並且嘗試確認每個導致錯誤狀態的異常或者錯誤。
但是如果你能完全避免日志文件呢?這里是它怎么做到的
許多了解它的java開發者有一大堆關於這個工具的問題想問,因此我們也建立了1對1的示例表格,來看看並且制定一個私人的工作計划吧
    此外Java中還移除了一些API,時間有限就不做翻譯和列舉,請點擊查看

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM