[翻譯]JDK8有什麼新東西?

jianhao_mo發表於2015-12-21

翻譯官方文件,刪除部分可忽略。
譯者:坤谷 ,校對:井桐

Java SE 8是一個Java主要特性的釋出版本。本文總結了在Java SE 8、JDK 8以及Oracle實現的Java SE 8中的新特性和增強的功能。點選下面各個元件的名稱可以獲取該元件增強的更詳細說明。

  • Java程式語言

    • Lambda表示式(Lambda Expressions)作為一種新的語言特性引入到這個版本中。它們允許我們將功能作為方法的引數傳遞,或者把程式碼看成是資料。Lambda表示式能夠讓你更加簡潔的表達單個方法的介面(函式式介面)的例項。
    • 方法引用(Method references)為有名稱的方法提供易於閱讀的lambda表示式。
    • 預設方法(Default methods)能夠使新功能被新增到庫的介面中,並確保與舊版本中為這些介面寫的程式碼二進位制相容。
    • 重複註解(Repeating Annotations)提供對於同樣的宣告和型別使用時可以多次使用相同的註解型別的能力。
    • 型別註解(Type Annotations)可以在一個型別的任意使用位置使用註解,而不侷限於在型別宣告處使用。配合可插拔的型別系統(pluggable type system)使用,型別註解可以提高程式碼的型別檢查能力。
    • 改進型別推斷
    • 方法引數反射
  • 集合類

    • 新的 java.util.stream包中的類為集合類的元素提供了流式API來支援函式式的操作。該流式API被整合到集合API中,它使得集合類可以進行(序列或並行map-reduce)批量操作。
    • 改進Has​​hMaps鍵衝突的效能
  • 緊湊的配置,提供了Java SE平臺的預定義子集,使得小型裝置的應用程式可以不需要再在整個平臺上部署執行。
  • 安全

    • 客戶端TLS 1.2預設啟用
    • 新的AccessController.doPrivileged變數使程式碼對其許可權的子集進行斷言,而避免遍歷整個方法棧來檢查其他許可權
    • 更強大的基於密碼的加密演算法
    • JSSE伺服器支援SSL/TLS伺服器名稱指示(SNI)擴充套件
    • 支援AEAD演算法:增強了SunJCE provider,支援AES/GCM/NoPadding cipher實現以及GCM演算法引數。增強SunJSSE provider,支援基於cipher suites的AEAD模式。看考甲骨文提供的文件,JEP 115。
    • 增強KeyStore,包括新的Domain KeyStore型別java.security.DomainLoadStoreParameter,以及keytool工具新的命令選項-importpassword
    • SHA-224訊息摘要
    • NSA Suite B Cryptography增強
    • 更好地支援高熵隨機數生成
    • 新的java.security.cert.PKIXRevocationChecker類用於配置X.509證照吊銷檢查。
    • Windows 64位PKCS11。
    • 為Kerberos 5 Replay Caching 新增rcache型別。
    • 支援Kerberos 5協議轉換和約束委派。
    • 預設情況下禁用Kerberos 5弱加密型別。
    • 對GSS-API / Kerberos 5提供未繫結的SASL。
    • SASL服務支援多主機名。
    • Mac OS X支援JNI橋接原生JGSS。
    • SunJSSE provider 支援更強的短暫DH金鑰。
    • JSSE支援伺服器端cipher suites的定製。
  • JavaFX
  • 工具

    • jjs命令用於啟動Nashorn引擎。
    • java命令可以啟動JavaFX應用程式。
    • 重新設計java man頁。
    • jdeps命令列工具用於分析類檔案。
    • Java管理擴充套件(JMX)給診斷命令提供遠端訪問。
    • jarsigner工具增加請求從Time Stamping Authority(TSA)已簽名的時間戳的選項。
    • javac工具

      • javac命令的-parameters選項可以用來儲存形參名稱並可以用反射API來獲取形參名稱。
      • javac命令現在能正確地執行在Java語言規範(JLS)第15.21關於相等運算子的型別規則。
      • javac工具支援檢查javadoc註釋的內容。檢查可能導致javadoc生成的文件的各種問題,如無效的HTML或可訪問性問題。 該功能是通過啟用新的-Xdoclint選項來執行。 欲瞭解更多資訊,請參閱執行“ javac -X ”的輸出。這個功能也可以在javadoc工具中使用,預設啟用。
      • javac工具還提供根據需要生成native標頭檔案的能力。 這免去了構建流程中單獨執行javah工具的必要。javac通過使用新的-h選項來開啟,該選項用於指定標頭檔案寫入指定的目錄。 native方法和標註了新註釋java.lang.annotation.Native的常量欄位,都將生成標頭檔案。
    • Javadoc工具

      • javadoc工具支援新DocTreeAPI,使你能夠以抽象語法樹的方式遍歷Javadoc註釋。
      • javadoc工具支援新的Javadoc訪問API,使你能夠直接從Java應用程式呼叫Javadoc工具,而不執行新的程式。 請參閱的javadoc新特性瞭解更多資訊。
    • javadoc工具現在已經支援檢查javadoc註釋的內容,檢查可能生成導致各種問題的註釋,如無效的HTML或可訪問性問題。 該功能是預設啟用,並且還可以通過新的-Xdoclint選項控制。 欲瞭解更多資訊,請參閱“ javadoc -X ”的輸出。 這個功能也可以在javac工具提供,雖然它不是預設啟用的。
  • 國際化

    • Unicode的改進,包括對Unicode 6.2.0支援。
    • 採用Unicode的CLDR資料和java.locale.providers系統屬性。
    • 新的Calendar和LocaleAPIs。
    • 能夠擴充套件安裝自定義資源包。
  • 部署

    • 對於沙盒applets和Java Web Start應用程式,URLPermission現在用於允許連線回他們所啟動的伺服器,SocketPermission許可權不再授予。
    • 所有安全級別的主JAR檔案的manifest必須包含許可權屬性。
  • 日期-時間包

    • 一組新的軟體包提供了一個全面的日期-時間模式。
  • 指令碼

  • Pack200

    • Pack200支援由JSR 292引入的常量池項和新的位元組碼。
    • 支援由JSR-292,JSR-308和JSR-335引入的JDK8類檔案的變化。
  • IO和NIO

    • Solaris新增基於Solaris事件埠機制的SelectorProvider,使用時,系統屬性java.nio.channels.spi.Selector設定為值sun.nio.ch.EventPortSelectorProvider
    • 減少<JDK_HOME>/jre/lib/charsets.jar檔案的大小。
    • 優化java.lang.String(byte[], *)建構函式和java.lang.String.getBytes()方法的效能。
  • java.lang和java.util包

    • 並行陣列排序
    • 標準Base64編碼器和解碼器
    • 無符號運算支援
  • JDBC

    • 刪除JDBC-ODBC橋。
    • JDBC 4.2引入了新功能。
  • Java DB

    • JDK 8包含Java DB 10.10。
  • 網路

    • 新增類java.net.URLPermission
    • 如果啟用了security manager,類java.net.HttpURLConnection 請求開啟一個連線需要獲得許可。
  • 併發

    • java.util.concurrent包新增了相關類和介面。
    • java.util.concurrent.ConcurrentHashMap類新增了方法,用於支援基於新的流設施和lambda表示式聚合操作。
    • java.util.concurrent.atomic包新增了類,用於支援可擴充套件的、可更新的變數。
    • java.util.concurrent.ForkJoinPool類新增了方法,用於支援公共執行緒池。
    • 新增了java.util.concurrent.locks.StampedLock類,提供了有三種模式的capability-based lock,用於控制讀/寫訪問。
  • Java的XMLJAXP
  • Hotsport JVM

    • 為使用Advanced Encryption Standard(AES)新增硬體相關的intrinsics。 可以通過UseAESUseAESIntrinsics兩個flag使得Intel硬體上的基於硬體的AES intrinsics生效。 硬體必須是2010或更高版本的Westmere硬體。例如,要啟用硬體AES,使用下面的選項:
  -XX:+ UseAES -XX:+ UseAESIntrinsics

要禁用硬體AES使用下面的選項:

  -XX:-UseAES -XX:-UseAESIntrinsics
  • 去除PermGen。
  • 對方法呼叫的位元組碼指令,支援Java程式語言的預設方法。


相關文章