咋弄嘞?Java8都不溜呢,10都如約而至,還109 項新特性!!!

String getMethodType:返回此堆棧幀所代表的方法類型,描述參數類型和返回值類型。

java.lang.invoke.MethodType:

Class> lastParameterType:返回這個方法類型的最後一個參數類型。如果這個方法類型沒有參數,則返回空類型作為崗哨值(Sentinel Value)。

java.lang.management.RuntimeMXBean:

long getPid: R返回正在運行的 JVM的進程 ID 。

java.lang.management.ThreadMXBean:

ThreadInfo dumpAllThreads(boolean, boolean, int):返回所有活動線程的線程信息,其中有指定的最大元素數量和同步信息的堆棧跟蹤。

ThreadInfo getThreadInfo(long, boolean, boolean, int):返回每個線程的線程信息,這些線程的標識位於輸入數組中,其中有指定的最大元素數量和同步信息的堆棧跟蹤。

java.lang.reflect.MalformedParameterizedTypeException:添加了一個新的構造函數,它以字符串的形式作為參數來獲取詳細信息。

java.net.URLDecoder:

java.net.URLEncoder:

這兩個類都有新的重載的解碼和編碼方法,將 charset作為附加參數。

  • java.nio.channels.Channels:

    兩個新的靜態重載方法,允許使用 Charset的 newReader(ReadByteChannel,Charset)和newWriter(WriteByteChannel,Charset)。

  • java.nio.file.FileStore:

    long getBlockSize:在這個文件存儲中返回每個塊的字節數。

  • java.time.chrono:這個包裡有三個類,HijrahEra、MiinguoEra和 ThaiBuddhistEra ,都有同樣的方法。

    String getDisplayName(TextStyle, Locale):這將返回用於識別 era的文本名稱,適合於向用戶展示。

  • java.time.format.DateTimeFormatter:

    localizedBy(Locale):返回指定格式器的一個副本,其中包含地區、日曆、區域、小數和/或時區的本地化值,這將取代該格式器中的值。

  • java.util: DoubleSummaryStatistics、IntSummaryStatistics和 LongSummaryStatistics都有一個新的構造函數,它包含 4個數值。它使用指定的計數、最小值、最大值和總和構造一個非空實例。

  • java.util.List:

    java.util.Map:

    java.util.Set:這些接口中的每一個都增加了一個新的靜態方法,copyOf(Collection)。這些函數按照其迭代順序返回一個不可修改的列表、映射或包含給定集合的元素的集合。

  • java.util.Optional:

    java.util.OptionalDouble:

    java.util.OptionalInt:

    java.util.OptionalLong:每一個類都有一個新的方法,orElseThrow ,它本質上和 get一樣,也就是說,如果 Optional有值則返回。否則,將拋出 NoSuchElementException 。

  • java.util.Formatter:

    java.util.Scanner:

    這兩個類都有三個新的構造函數,除了其他參數之外,它們都帶有一個 charset參數。

java.util.Properties:這有一個新的構造函數,它接受一個 int參數。這將創建一個沒有默認值的空屬性列表,並且指定初始大小以容納指定的元素數量,而無需動態調整大小。還有一個新的重載的 replace方法,接受三個 Object參數並返回一個布爾值。只有在當前映射到指定值時,才會替換指定鍵的條目。

java.SplittableRandom:

void nextBytes(byte):用生成的偽隨機字節填充一個用戶提供的字節數組。

java.util.concurrent.FutureTask:添加了 toString方法,該方法返回一個標識 FutureTask的字符串,以及它的完成狀態。在括號中,狀態包含如下字符串中的一個,“Completed Normally” 、“Completed Exceptionally”、 “Cancelled”或者 “Not completed”。

java.util.concurrent.locks.StampedLock:

boolean isLockStamp(long):返回一個標記戳表示是否持有一個鎖。

boolean isOptimisticReadStamp(long):返回一個標記戳代表是否成功的進行了樂觀讀(optimistic read)。

boolean isReadLockStamp(long):返回一個標記戳表示是否持有一個非獨佔鎖(即 read lock )。

boolean isWriteLockStamp(long):返回一個標記戳表示是否持有一個獨佔鎖(即 write lock )。

java.jar.JarEntry:

String getRealName:返回這個 JarEntry的真實名稱。如果這個 JarEntry是一個多版本 jar文件的入口,它被配置為這樣處理,這個方法返回的名字是 JarEntry所代表的版本條目的入口,而不是 ZipEntry.getName返回的基本條目的路徑名。如果 JarEntry不代表一個多版本 jar文件的版本化條目或者 jar文件沒有被配置為作為一個多版本 jar文件進行處理,這個方法將返回與 ZipEntry.getName返回的相同名稱。

java.util.jar.JarFile:

Stream versionedStream:返回 jar文件中指定版本的入口對應 Stream 。與 JarEntry的 getRealName方法類似,這與多版本 jar文件有關。

java.util.spi.LocaleNameProvider:

getDisplayUnicodeExtensionKey(String, Locale):為給定的 Unicode擴展鍵返回一個本地化名稱。

getDisplayUnicodeExtensionType(String, String, Locale):

java.util.stream.Collectors:

toUnmodifiableList:

toUnmodifiableSet:

toUnmodifiableMap(Function, Function):

toUnmodifiableMap(Function, Function, BinaryOperator):這四個新方法都返回 Collectors ,將輸入元素聚集到適當的不可修改的集合中。

  • java.lang.model.SourceVersion:現在有了一個字段,它代表了 JDK 10的版本。

  • java.lang.model.util.TypeKindVisitor6:

    javax.lang.model.util.TypeKindVisitor9:

    (我必須承認,我從來沒聽說過這些類)

    R visitNoTypeAsModule(NoType, P):訪問一個 MODULE的 pseudo-type 。我不確定為什麼只有這兩個類得到這個方法,因為還有 Visitor7和 Visitor8變量。

  • javax.remote.management.rmi.RMIConnectorServer:

    這個類已經添加了兩個字段: CREDENTIALS_FILTER_PATTERN和 SERIAL_FILTER_PATTERN 。

  • javax.ButtonModel:看,Swing還在更新!

    ButtonGroup getGroup:返回按鈕所屬的組。通常用於單選按鈕,它們在組中是互斥的。

  • javax.plaf.basic.BasicMenuUI:

    Dimension getMinimumSize(JComponent):返回指定組件適合觀感的最小大小。

JVM規範改動

這些改動相當小:

  • 4.6節:類文件格式(第99頁)。在方法訪問標誌方面有小的改動。

  • 4.7節:模塊屬性(第169頁)。如果模塊不是 java.base ,則 JDK 10不再允許設置 ACC_TRANSITIVE或 ACC_STATIC_PHASE 。

  • 4.10節:類文件的校驗(第252頁)。dup2指令已改變了 typesafe form 1的定義,顛倒了 canSafleyPushList一節中類型的順序(你需要仔細查看才能發現它)。

  • 5.2節:Java虛擬機啟動(第350頁)。該描述添加了在創建初始類或接口時可使用用戶定義的類加載器( bootstrap類加載器除外)。

對 Java語言規範的更改

這裡還有一些更改,但主要是為了支持局部變量類型推斷。

  • 第3.8節:標識符(第23頁)。在忽略了可忽略的字符之後,標識符的等價性現在被考慮了。這似乎是合乎邏輯的。

    (第24頁)一個新的 Token,TypeIdentifier,它支持對局部變量類型推斷的新用法,而 var的使用不是關鍵字,而是一個具有特殊含義的標識符,作為局部變量聲明的類型。

  • 第4.10.5節:類型預測(第76頁)。這是一個相當複雜的部分,它涉及到捕獲變量、嵌套類以及如何使用局部變量類型推斷。我建議你閱讀規範中的這一部分,而不是試圖解釋它。

  • 第6.1節:聲明(第134頁)。一個反映使用 TypeIdentifier來支持局部變量類型的推斷的小改動。

  • 第6.5節:確定名字的含義(第153頁,第158頁和第159頁)。根據類型標識符的使用而更改類類型。

  • 第6.5.4.1:簡單的 PackageOrTypeNames(第160頁)

  • 第6.5.4.2節:合規的 PackageOrTypeNames(第160頁)。這兩種方式都與使用 TypeIdentifier有細微的變化。

  • 第7.5.3:單靜態導入聲明(第191頁)。這改變了導入具有相同名稱的靜態類型的規則。除非類型是相同的,否則這將成為一個錯誤,在這種情況下,重複被忽略。

  • 第7.7.1:依賴(第198頁)。如果你明確聲明一個模塊需要 java.base ,那在必要的關鍵字之後,你就不能再使用修飾符(例如靜態)了。

  • 第8部分:正式參數(第244頁)。接收者參數可能只出現在一個實例方法的 formalparameters列表,或者是一個內部類的構造函數中,其中內部類沒有在靜態上下文中聲明。

  • 第9.7.4節:註釋可能出現的地方(第335頁)。有一個與局部變量類型推斷相關的變更。

  • 第14.4部分:局部變量聲明語句(第433頁)。實現局部變量類型推斷所需的大量更改。

  • 第14節:增強的 for語句(第455頁)。這個結構已經更新,包括對局部變量類型推斷的支持。

  • 第14.20.3節:try-with-resources(474頁)。這個結構已經更新,包括對局部變量類型推斷的支持。

最後,第 19章有多處語法更新,反映了應更多使用 TypeIdentifier類型標識符,而不僅僅是 Identifier標識符,以支持局部變量類型推斷。

雜項

  • 如果 Kerberos的配置文件 krb5.conf包含一個 INCLUDEDIR選項,那麼在 INCLUDEDIR這個目錄下所有以 .conf結尾的文件都會被默認加載進來。

  • 以前版本中已經過期的 Java的啟動選項 -d32和 –d64在當前版本已經被移除。如果你在新的版本里仍然使用了這兩個選項,JVM將無法正常啟動。

  • JDK10支持 JDK9中的新版本 Doclet,JDK6、JDK7、JDK8中的 Doclet版本都不再支持。

  • JDK10重新啟用了在 JDK9中被不當過時的 newFactory方法。

  • JDK10引入了一個新的 Javadoc標籤: {@summary…},解決了以前版本無法生成 API摘要的問題。

  • JDK10去掉了 BiasedLockingStartupDelay的 4秒啟動延時。

  • 以下在 com.sun.security.auth包中的過時的類在新版本中都已經被移除:

    • PolicyFile

    • SolarisNumericGroupPrincipal

    • SolarisNumericUserPrincipal

    • X500Principal

    • SolarisLoginModule

    • SolarisSystem

  • 在 java.lang.SecurityManager類中的以下屬性和方法(從 JDK 1.2就已經過時)終於被移除了:

    • inCheck (屬性)

    • getInCheck

    • classDepth

    • classLoaderDepth

    • currentClassLoader

    • currentLoadedClass

    • inClass

    • inClassLoader

  • 以下 java.lang.Runtime類中已經被廢棄的國際化方法在新版本被移除:

    • getLocalizedInputStream

    • getLocalizedOutputStream

  • 以下廢棄的 Hotspot –X選項在新版本中被移除:-Xoss, -Xsqnopause, -Xoptimize, -Xboundthreads and –Xusealtsigs.

  • policytool在新版本中被移除。

  • javadoc工具在新版本中可以通過 –add-stylesheets命令選項支持多個 stylesheets 。

  • 新版本的 JVM能夠根據系統分配給當前 Docker容器的 CPU數和內存來配置線程池和 GC機制,而不再是直接使用系統的 CPU和內存。並且增加了三個更強大的命令選項:-XX:InitialRAMPercentage、-XX:MaxRAMPercentage和 -XX:MinRAMPercentage 。

  • 新版本增加了一個新的系統屬性:jdk.disableLastUsageTracking。這個新增的屬性就像它的名字一樣,會禁用 JRE的上一次使用跟蹤。

如上所述,儘管距離 JDK 9發佈僅有六個月的時間,但 JDK 10實際上有相當多的變化。當然,它們中的一些是非常小的變更,但我認為這表明目前每 6個月發佈一次的節奏,將在 Java平臺快速迭代改進方面起到作用。

同時也讓我們期待 JDK 11將帶來些什麼…

相關鏈接

  • http://docs.oracle.com/javase/10/docs/technotes/guides/install/install_overview.html

  • http://www.oracle.com/technetwork/java/javase/documentation/10u-relnotes-4108739.html

  • http://www.oracle.com/technetwork/java/javase/10-relnote-issues-4108729.html#NewFeature


分享到:


相關文章: