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
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
閱讀更多 3T教育編程猿 的文章