Java 10 的重要特性
[286] 局部變數類型推斷- 提議將 var 關鍵字引入 Java,從而無需明確指定局部變數的類型。也就是說,現在你不能指定初始化變數的型別,而是寫類似:var list = new ArrayList<String>(); //перед нами ArrayList<String>
var stream = list.stream(); // перед нами Stream<String>
這消除了我們之前必須使用的 ArrayList<String> 類型定義的重複。有趣的是,var 並沒有成為關鍵字,而是保留類型。也就是說,您可以使用 var 作為變數、方法或套件的名稱。但你不能那樣命名類別(真是損失啊!)。 [296] 將 JDK 林合併到單一儲存庫。JDK 9 有八個儲存庫 - root、corba、hotspot、jaxp、jaxws、jdk、langtools、nashorn。在 Java 10 中,整個森林將合併到一個儲存庫中,以便可以跨相互依賴的變更集的儲存庫執行原子提交。 [304]垃圾收集器介面不是開發者可以用來控制垃圾收集的介面。相反,我們在 JVM 原始程式碼中獲得了一個乾淨的垃圾收集器接口,使您可以快速輕鬆地整合替代收集器。那些夢想將自己的垃圾收集器添加到 JVM 的人將會對這項改進感到非常滿意。 [307] G1 垃圾收集器的平行完整 GC。在 JDK 9 中,G1 成為預設的垃圾收集器,而先前預設的垃圾收集器是並行 GC,它可以跨多個執行緒收集垃圾。現在 G1 也可以做到這一點;以前它是在一個線程中完成的,這有時會造成困難。順便說一句,開發人員將能夠使用 - XX:ParallelGCThreads.
[310] 應用程式類別資料共享參數來配置線程數- Java 10 中採用的這一開發提供了改進的加載和跟踪,擴展了現有的類別共享(CDS)功能允許應用程式類別位於通用存檔中。 類別資料共享(簡稱 CDS)適用於帶有 *class 副檔名的檔案。此功能可讓您選擇類別的某個子集,處理它們並將它們壓縮到特殊的檔案中。所有這些都是為了節省內存。通常,JVM 的不同實例會載入標準庫中包含的相同類別。CDS 允許所有這些 JVM 實例共用一個包含放置在其中的類別的存檔。這減少了程式載入時間和記憶體使用量。事實上,從版本 5 開始,當多個 JVM 在同一實體或虛擬機器上運行時,CDS 可以提高 JVM 啟動效能並減少資源佔用。但早期 CDS 的使用僅限於引導程式。現在,一個名為 Application CDS 的擴充版本可讓您載入帶有其他載入器類別的特殊檔案。 [312] 執行緒本地握手是 JVM 內部相當低階的更改,它將允許跨執行緒執行回調,而無需執行全域 VM 安全點。這將允許您無成本地停止單個線程,而不是一次停止所有線程(或根本不停止)。 [313]刪除本機標頭產生工具 (javah)。早在 Java 9 中,語言開發人員就開始積極刪除不必要的工具,JEP 313 繼續了這項出色的工作。如果程式碼中有本機方法,javah 工具會產生 JNI 標頭。健康?當然可以,但從 JDK 8 開始,本機 javac 編譯器本身就可以產生 JNI 標頭。所以現在他們決定擺脫javah。順便說一句,巴拿馬計畫目前正在開發中,特別是可以取代JNI。 [314] 其他 Unicode 語言標籤擴充功能此變更旨在改善 java.util.Locale 類別和相關 API,以實現 BCP 47 語言標籤的其他 Unicode 擴充。特別是貨幣類型 (cu) 的標籤,第一天現在支援週(fw)、地區(rg) 和時區(tz) 覆蓋。 [316] 替代記憶體裝置上的堆分配這項創新將幫助那些使用 DRAM 以外的記憶體類型的使用者。由於技術不斷變化,使用具有與 DRAM 相同的介面和效能特徵的非揮發性記憶體已成為當今的客觀現實。因此,JEP 316 允許 JVM 將堆放置在其他類型的記憶體中。 [317] 實驗性基於 Java 的 JIT 編譯器。最近宣布了 Metropolis 項目,該項目提議用 Java 重寫大部分 JVM。如果您不知道,目前版本是用 C++ 編寫的。好吧,如果您已經了解情況,那麼一開始您可能會覺得這樣的想法很奇怪。既然JVM是用Java寫的,那麼執行JVM就不需要JVM了嗎?這就是遞歸,讓人想起彼此相對的鏡子。然而,現實情況有些不同:僅僅因為 JVM 是用 Java 編寫的,並不意味著您必須將其編譯為字節碼。實際上,您可以使用 AOT 編譯,然後 JIT 編譯程式碼,以提高效能。
javac 等工具通常用於編譯 Java 程式碼。它將 Java 程式轉換為一組帶有字節碼的類別檔案。接下來,JVM 運行字節碼,其解釋器將它們轉換為處理器指令。除了解釋器之外,JVM 還具有內建編譯器,它還可以從字節碼為處理器建立指令。這就是所謂的運行時編譯,啟動時編譯。通常最常用的程式碼都會經過這樣的編譯——這會提高效能。 編譯器可以以不同的方式執行操作:JIT 編譯(即時)- 動態,在程式執行期間,或 AOT 編譯(提前)- 在執行之前。 jaotc AOT編譯器是在JDK 9中引入的。目前,Hotspot JVM包含兩個JIT編譯器,C1(用於速度)和C2(用於最佳化)。 |
[1-9][0-9]*((\.0)*\.[1-9][0-9]*)*
新 API
JDK 10 標準類別庫新增了 73 個。-
java.awt.工具包
int getMenuShortcutKeyMaskEx ()
:定義哪個擴充修改鍵是快捷選單對應的加速鍵。 -
java.awt.geom.Path2D:
void trimToSize ()
:將此實例的容量削減Path2D
至目前大小。應用程式可以使用此操作來最小化路徑儲存。相同的方法已新增至內部類別Path2D.Double
和Path2D.Float
。 -
java.io.ByteArrayOutputStream:
String toString (Charset)
:重載toString
,透過使用指定的編碼解碼字節,將緩衝區的內容轉換為字串。 -
java.io.PrintStream 和 lang.io.PrintWriter:
這兩個類別都有三個帶有附加參數的新建構函數
charset
。 -
java.io.Reader:
long transferTo (Writer)
:從此讀取器讀取所有字符,並按照讀取順序將字符寫入給定寫入器。 -
java.lang.Runtime.版本:
為新版本 (JEP 322) 字串欄位傳回整數值的四個新方法:
feature ()
、interim ()
和。patch ()
update ()
-
java.lang.StackWalker.StackFrame:
-
字串 getDescriptor():
傳回此堆疊幀表示的方法的句柄,如 Java 虛擬機器規格所定義。
-
字串 getMethodType():
returns
MethodType
,表示堆疊幀所表示的方法的參數類型和傳回類型。 -
java.lang.invoke.MethodType:
Class <?> LastParameterType (): возвращает последний тип параметра этого типа метода. Если этот тип не имеет параметров, instead of него возвращается meaning
sentinel void.class
. -
java.lang.management.RuntimeMXBean:
long getPid ()
возвращаетpid
запущенной виртуальной машины Java. -
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:
оба этих класса получor новые перегруженные методы расcodeирования и codeирования, которые используют
charset
в качестве дополнительного параметра. -
java.nio.channels.Channels:
Два новых статических перегруженных метода,
newReader (ReadByteChannel, Charset)
иnewWriter (WriteByteChannel, Charset)
, которые позволяют использоватьcharset
. -
java.nio.file.FileStore:
long getBlockSize ()
: возвращает количество byteов на блок в этом хранorще файлов. -
java.time.chrono:
три класса в этом пакете,
HijrahEra
,MiinguoEra
иThaiBuddhistEra
, получor методString getDisplayName (TextStyle, Locale)
. Он возвращает текстовое Name, используемое для идентификации эпохи, подходящее для представления пользователю. -
java.time.format.DateTimeFormatter:
localizedBy (Locale)
: возвращает копию этого форматтера с локализованными значениями языка, календаря, региона, десятичного стиля и / or часового пояса, которые заменяют значения в этом формате. -
java.util:
DoubleSummaryStatistics
,IntSummaryStatistics
иLongSummaryStatistics
получor новый конструктор, который принимает четыре числовых значения. Он создает непустой экземпляр с указанным счетчиком, минимумом, максимумом и суммой. -
java.util.List, java.util.Map и java.util.Set:
каждый из этих интерфейсов обзавёлся новым статическим методом
copyOf (Collection)
. Они возвращают неизменяемыеList
,Map
orSet
, содержащие элементы данной коллекции, в своем порядке итерации. -
java.util.Optional, java.util.OptionalDouble, java.util.OptionalInt, java.util.OptionalLong:
каждый из этих классов получает новый метод
orElseThrow ()
, который по существу делает то же самое, что иget ()
, то есть если condition выполняется, meaning возвращается. В противном случае генерируется исключениеNoSuchElementException
. -
java.util.Formatter и java.util.Scanner:
Оба этих класса получor три новых конструктора, которые на вход получают
charset
в дополнение к другим аргументам. -
java.util.Properties:
Здесь появился новый конструктор, который принимает аргумент
int
. Это создает пустой список свойств без значений по умолчанию и с начальным размером, содержащим указанное количество элементов без необходимости динамического изменения размера. Также появилась новая, перегруженная version методаreplace
, которая принимает три параметраObject
и возвращает логическое meaning. -
java.SplittableRandom:
void nextBytes (byte [])
: заполняет предоставленный пользователем массив byteов с генерируемыми псевдослучайными byteами. -
java.util.concurrent.FutureTask:
добавлен метод
toString ()
, который возвращает строку, идентифицирующуюFutureTask
, а также ее состояние завершения. Состояние (в скобках) содержит одну из строк: «Completed Normally» (нормальное завершение), «Completed Exceptionally» (завершение с исключением), «Cancelled» (отменено) or «Not completed» (не завершено). -
java.util.concurrent.locks.StampedLock:
новые методы
boolean isLockStamp (long)
,boolean isOptimisticReadStamp (long)
,boolean isReadLockStamp (long)
иboolean isWriteLockStamp (long)
. -
java.jar.JarEntry:
String getRealName ()
: возвращает настоящее Name этогоJarEntry
. ЕслиJarEntry
является записью мультирелизного jar-file, настроенного для обработки, тогда Name, возвращаемое этим методом — Name пути версии, которую представляетJarEntry
. ИначеJarEntry
возвращает то же Name, что иZipEntry.getName ()
. -
java.util.jar.JarFile:
Stream <JarEntry> versionedStream ()
: возвращает поток записей в файле с версией jar. Подобно методуgetRealName
дляJarEntry
, связан с мультирелизными jar-fileми. -
java.util.spi.LocaleNameProvider:
getDisplayUnicodeExtensionKey (String, Locale)
: возвращает локализованное Name для данногоUnicode extension key
.getDisplayUnicodeExtensionType (String, String, Locale)
: возвращает локализованное Name для данногоUnicode extension key
. -
java.util.stream.Collectors:
toUnmodifiableList ()
,toUnmodifiableSet ()
,toUnmodifiableMap (Function, Function)
,toUnmodifiableMap (Function, Function, BinaryOperator)
— эти четыре новых метода возвращают коллекторы (Collectors), которые накапливают входные элементы в соответствующую немодифицируемую коллекцию. -
java.lang.model.SourceVersion:
теперь это поле RELEASE_10 для представления версии JDK 10.
-
java.lang.model.util.TypeKindVisitor6 и javax.lang.model.util.TypeKindVisitor9:
что-то не вполне понятное:).
-
R visitNoTypeAsModule (NoType, P):
посещает псевдо-тип
MODULE
. -
javax.remote.management.rmi.RMIConnectorServer:
У этого класса было добавлено два поля:
CREDENTIALS_FILTER_PATTERN и SERIAL_FILTER_PATTERN
. -
javax.ButtonModel:
Представляете, Swing все еще обновляется!
-
ButtonGroup getGroup ():
возвращает группу, к которой принадлежит кнопка. Обычно используется с
radio buttons
, которые являются взаимоисключающими в своей группе. -
javax.plaf.basic.BasicMenuUI:
Dimension getMinimumSize (JComponent)
: возвращает минимальный размер указанного компонента, подходящий для внешнего вида.
What еще почитать? |
---|
GO TO FULL VERSION