改變軟件開發的5個Java9新特性

  今天咱們已經對Java 9中所期待的特性有了一個很清晰的圖景。若是Java 8能夠被描述爲主要是lambdas表達式、streams和API變化的話,那麼Java 9就是關於Jigsaw、額外的實用工具和內部的變化。在這篇文章中,收集了一些咱們認爲是Java 9中最期待的特性——除了一般的猜想以外,Jigsaw項目,承擔了打破JRE並對Java核心組件模塊化的使命。html

  這裏有一些特性是Java 9中絕對必要了解的,其中的一些已經在早期的發佈版本中爲你搗鼓作好了準備。web

  1.Java + REPL = jshell算法

  是的。以前咱們懷疑Kulla項目是否會在Java 9中準時發佈,但如今已獲得了官方確認。下一版發佈的Java將會有稱爲jshell的新命令行工具,它會添加本地支持和以Java方式對REPL(交互式解釋器)進行推廣。意思是說,若是你想只運行幾行Java代碼,你沒必要把它包裝進一個單獨的工程或者方法。shell

  噢,你能夠忘掉那些分號了:瀏覽器

  1websocket

  2socket

  3-> 2 + 2模塊化

  | 表達式的值是4工具

  | 將臨時變量$1的類型設爲int性能

  還有一些像REPL加載項同樣的替代品會增長到流行的IDE和解決方案中,就像Java REPL網頁控制檯。但目前爲止,尚未官方的或者合適的方式來這麼作。jshell在早期的版本中已經能夠用了,等着你給它來個測試運行。

  二、微基準測試要來了

  由Alexey Shipilev開發的Java微基準測試套件(Java Microbenchmarking Harness)正在其進化的下一階段,並加入Java做爲官方基準解決方案。咱們真的很喜歡在Takipi作基準,因此一套標準化的執行方式是咱們期待的。

  JHM是一組用來編譯、運行和分析nano/micro/milli/macro基準的套件。當涉及到精確基準評估,對結果產生很大影響的能力將備受關注,好比預熱時間和優化。當你以微秒或納秒計時的狀況下尤爲如此。因此,若是你想要更加精確的結果來幫助跟蹤基準以作出正確的決定,JMH是你的最佳選擇——而且如今它已經成爲Java 9的同義詞了。

  三、G1會成爲新的默認垃圾收集器嗎?

  咱們常常據說的一個誤解是:Java只有一個垃圾收集器,而事實上它有4個。Java 9中,仍有一個運行提議,關於替換由Java 7引入的G1默認垃圾收集器(並行/吞吐量收集)的討論。不一樣收集器之間差異精簡概述,能夠查看這篇裏的文章。

  一般來講,G1被設計來更好地支持大於4GB的堆,而且不會形成頻繁的GC暫停,但當暫停發生時,每每會處理更長時間。最近咱們和Outbrain的性能專家Haim Yadid討論了關於GC的方方面面,來幫助你瞭解更多各收集器之間不一樣的權衡。一樣,若是你想要深刻了解相關討論,那麼hotspot-dev和jdk9-dev的郵件組是個開始學習不錯的地方。

  四、將來是HTTP 2.0

  官方的HTTP 2.0標準是幾個月以前被批准的,基於Google的SPDY算法構建。SPDY已經展現了相對HTTP 1.1巨大的速度提高,範圍在11.81%到47.7%之間,而且它已經存在於大多數現代的瀏覽器中了。Java 9將全面支持HTTP 2.0,而且爲Java配備一個全新的HTTP客戶端來替代HttpURLConnection,而且同時還實現HTTP 2.0和websockets。

  五、進程API獲得了巨大的推進

  到目前爲止,經過Java來控制和管理操做系統進程能力有限。例如在早期版本的Java中,爲了作一些簡單的事情,像獲得進程PID,要麼訪問本機代碼,要麼用某種神奇的臨時解決方法。此外,還可能須要一個對於每一個平臺提供不一樣實現來保證你獲得正確的結果。

  在Java 9中,除了獲取Linux PID的代碼,如今都像這樣來獲取:

  1

  2

  3

  4

  5

  6

  7

  8

  9

  10

  11publicstaticvoidmain(String[] args)throwsException {

  Process proc = Runtime.getRuntime().exec(newString[]{"/bin/sh","-c","echo $PPID"});

  if(proc.waitFor() ==0) {

  InputStream in = proc.getInputStream();

  intavailable = in.available();

  byte[] outputBytes =newbyte[available];

  in.read(outputBytes);

  String pid =newString(outputBytes);

  System.out.println("Your pid is "+ pid);

  }

  }

  轉向像這樣的代碼(一樣也支持全部的操做系統):

  1System.out.println("Your pid is"+ Process.getCurrentPid());

  這一更新將擴展Java與操做系統交互的能力:全新的直接操做PID、進程名和狀態的方法,操做JVM線程和進程等等能力。

  http://mt.sohu.com/20160906/n467734021.shtml

  http://mt.sohu.com/20160906/n467725557.shtml

  http://mt.sohu.com/20160906/n467729919.shtml

相關文章
相關標籤/搜索