Java 10-un vacib xüsusiyyətləri
[286] Lokal-Dəyişən Növ Nəticəsi - Var açar sözünü Java-ya daxil etmək təklifi, yerli dəyişənin tipini açıq şəkildə təyin etmək ehtiyacını aradan qaldırır. Yəni, indi başlatılan dəyişənin növünü təyin edə bilməzsiniz, ancaq belə bir şey yazın:var list = new ArrayList<String>(); //перед нами ArrayList<String>
var stream = list.stream(); // перед нами Stream<String>
Bu, əvvəllər istifadə etməli olduğumuz ArrayList<String> tipli tərifin təkrarlanmasını aradan qaldırır. Maraqlıdır ki, var açar sözə çevrilmir, lakin qorunan bir növdür. Yəni var-dan dəyişənin, metodun və ya paketin adı kimi istifadə edə bilərsiniz. Ancaq sinfi bu şəkildə adlandıra bilməyəcəksiniz (nə itki!). [296] JDK meşəsinin vahid depoda birləşdirilməsi . JDK 9-da səkkiz depo var - root, corba, hotspot, jaxp, jaxws, jdk, langtools, nashorn. Java 10-da bütün bu meşə bir-birindən asılı dəyişikliklər dəstlərinin repozitoriyaları arasında atom öhdəliyini yerinə yetirməyi mümkün etmək üçün vahid depoda birləşdiriləcək. [304] Zibil Kollektoru İnterfeysi tərtibatçılar tərəfindən zibil yığılmasına nəzarət etmək üçün istifadə edilə bilən interfeys deyil. Bunun əvəzinə biz JVM mənbə kodunda təmiz zibil toplayıcı interfeysi əldə edirik ki, bu da sizə alternativ kollektorları tez və asanlıqla inteqrasiya etməyə imkan verir. JVM-ə öz zibil kollektorunu əlavə etmək arzusunda olanlar bu təkmilləşdirmədən çox məmnun olacaqlar. [307] G1 zibil toplayıcısı üçün Paralel Tam GC . JDK 9-da G1 defolt zibil toplayıcısı oldu, halbuki əvvəllər defolt zibil kollektoru birdən çox mövzu üzrə zibil toplaya bilən Paralel GC idi. İndi G1 bunu da edə bilər, əvvəllər bunu bir ipdə edirdi, bu da bəzən çətinlik yaradırdı. XX:ParallelGCThreads.
Yeri gəlmişkən, tərtibatçılar - [310] Application Class-Data Sharing parametrindən istifadə edərək mövzuların sayını konfiqurasiya edə biləcəklər - Java 10-da qəbul edilmiş bu inkişaf təkmilləşdirilmiş yükləmə və izləmə təklif edir, mövcud Class Sharing (CDS) funksiyasını genişləndirir. tətbiq siniflərinin ümumi arxivdə yerləşməsinə icazə vermək. Class-Data Sharing və ya *class uzantılı fayllarla qısa iş üçün CDS. Bu funksiya müəyyən bir sinif alt dəstini seçməyə, onları emal etməyə və xüsusi arxivə sıxmağa imkan verir. Bütün bunlar yaddaşa qənaət etmək üçün edilir. Çox vaxt JVM-nin müxtəlif nümunələri standart kitabxanaya daxil olan eyni sinifləri yükləyir. Və CDS bütün bu JVM nümunələrinə bir arxivi orada yerləşdirilən siniflərlə paylaşmağa imkan verir. Bu, həm proqram yükləmə vaxtını, həm də yaddaşdan istifadəni azaldır. Əslində, CDS JVM başlanğıc performansını yaxşılaşdırır və 5-ci versiyadan başlayaraq birdən çox JVM eyni fiziki və ya virtual maşında işləyərkən resurs izini azaldır. Lakin əvvəllər CDS-nin istifadəsi yalnız yükləyici yükləyici ilə məhdudlaşırdı. İndi Application CDS adlı genişləndirilmiş versiya digər yükləyicilər üçün sinifləri olan xüsusi arxivləri yükləməyə imkan verir. [312] Thread-Local Handshakes JVM daxilində kifayət qədər aşağı səviyyəli dəyişiklikdir ki, bu da qlobal VM təhlükəsizlik nöqtəsini işə salmadan mövzular arasında geri çağırışların icrasına imkan verəcək. Bu, bir anda (və ya heç birini) deyil, ayrı-ayrı ipləri xərcsiz dayandırmağa imkan verəcəkdir. [313] Yerli Başlıq Yaratma Alətini (javah) silin . Java 9-da dil tərtibatçıları lazımsız alətləri aktiv şəkildə silməyə başladılar və JEP 313 bu yaxşı işi davam etdirir. Kodda yerli metodlar varsa, javah aləti JNI başlıqlarını yaradır. Sağlam? Əlbəttə, lakin JDK 8 ilə başlayan yerli javac kompilyatoru özü JNI başlıqlarını yarada bilər. Beləliklə, indi javahdan qurtulmaq qərarına gəldilər. Yeri gəlmişkən, hazırda Panama layihəsi hazırlanır ki , bu da xüsusilə JNI-ni əvəz edə bilər. [314] Əlavə Unicode Dil-Teq Genişləndirmələri Bu dəyişiklik BCP 47 dil teqlərinə əlavə Unicode genişləndirmələrini həyata keçirmək üçün java.util.Locale sinifini və əlaqəli API-ləri təkmilləşdirmək üçün nəzərdə tutulub. Xüsusilə, valyuta növü (cu), birinci gün üçün teqlər indi həftə (fw), region (rg) və saat qurşağı (tz) ləğv ediləcək. [316] Alternativ Yaddaş Qurğularında Yığın Ayırma Bu yenilik DRAM-dan başqa yaddaş növlərindən istifadə edənlərə kömək edəcək. Texnologiyalar daim dəyişdiyindən, eyni interfeysə və DRAM-a oxşar performans xüsusiyyətlərinə malik qeyri-sabit yaddaşdan istifadə günümüzün obyektiv reallığıdır. Beləliklə, JEP 316 JVM-ə digər yaddaş növlərinə yığın yerləşdirməyə imkan verir. [317] Eksperimental Java Əsaslı JIT Kompilyatoru . Bu yaxınlarda Java-da JVM-nin əksəriyyətini yenidən yazmağı təklif edən Metropolis layihəsi elan edildi. Əgər bilmirsinizsə, cari versiya C++ dilində yazılmışdır. Yaxşı, əgər siz artıq məlumatlısınızsa, yəqin ki, əvvəlcə belə bir fikir sizə qəribə görünəcək. JVM Java-da yazıldığından, JVM-i işə salmaq üçün JVM-ə ehtiyacınız olmayacaqmı? Bir-birinə qarşı güzgüləri xatırladan rekursiya belədir. Bununla belə, reallıq bir az fərqlidir: JVM Java-da yazıldığı üçün bu, onu bayt kodlarına yığmalı olduğunuz demək deyil. Siz həqiqətən AOT tərtibindən istifadə edə bilərsiniz və sonra JIT performansı yaxşılaşdırmaq üçün işlədiyi üçün kodu tərtib edir.
Java kodunu tərtib etmək üçün adətən javac kimi bir vasitə istifadə olunur. O, Java proqramını bayt kodlu sinif faylları dəstinə çevirir. Sonra JVM bayt kodunu işlədir və onun tərcüməçisi onları prosessor təlimatlarına çevirir. Tərcüməçiyə əlavə olaraq, JVM-də quraşdırılmış kompilyator da var və o, həmçinin bayt kodundan prosessor üçün təlimatlar yarada bilər. Bu, başlanğıc zamanı tərtib, iş vaxtı tərtibatı adlanır. Adətən ən çox istifadə olunan kod belə tərtibə məruz qalır - bu, performansı yaxşılaşdırır. Kompilyator hərəkətləri müxtəlif üsullarla yerinə yetirə bilər: JIT kompilyasiyası (vaxtında) - dinamik, proqramın icrası zamanı və ya AOT tərtibi (vaxtından əvvəl) - icradan əvvəl. jaotc AOT kompilyatoru JDK 9-da təqdim edilmişdir. Hazırda Hotspot JVM-də C1 (sürət üçün) və C2 (optimallaşdırma üçün) iki JIT kompilyatoru var. |
[1-9][0-9]*((\.0)*\.[1-9][0-9]*)*
Yeni API-lər
JDK 10 standart sinif kitabxanalarına 73 əlavə var.-
java.awt.Alətlər dəsti
int getMenuShortcutKeyMaskEx ()
: Qısayol menyusu üçün hansı genişləndirilmiş dəyişdirici düymənin müvafiq sürətləndirici düymə olduğunu müəyyən edir. -
java.awt.geom.Path2D:
void trimToSize ()
: Bu nümunənin tutumunuPath2D
cari ölçüsünə qədər kəsir. Tətbiq yol yaddaşını minimuma endirmək üçün bu əməliyyatdan istifadə edə bilər. Eyni üsul daxili siniflərəPath2D.Double
vəPath2D.Float
. -
java.io.ByteArrayOutputStream:
String toString (Charset)
: həddən artıq yüklənmişdirtoString
, göstərilən kodlaşdırmadan istifadə edərək baytları deşifrə etməklə buferin məzmununu sətirə çevirir. -
java.io.PrintStream və lang.io.PrintWriter:
Bu siniflərin hər ikisində əlavə arqument alan üç yeni konstruktor var
charset
. -
java.io.Reader:
long transferTo (Writer)
: Bu oxucudan bütün personajları oxuyur və personajları oxunma ardıcıllığı ilə verilmiş yazıçıya yazır. -
java.lang.Runtime.Versiya:
Sətir sahələrinin yeni versiyası (JEP 322) üçün tam dəyər qaytaran dörd yeni üsul:
feature ()
,interim ()
,patch ()
vəupdate ()
. -
java.lang.StackWalker.StackFrame:
-
getDescriptor() sətri:
Java Virtual Maşın Spesifikasiyası ilə müəyyən edilmiş bu yığın çərçivəsi ilə təmsil olunan metoda sapı qaytarır.
-
String getMethodType():
MethodType
Yığın çərçivəsi ilə təmsil olunan metod üçün parametr növlərini və qaytarma növünü təmsil edən qaytarır . -
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