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 бастапқы codeында таза қоқыс жинаушы интерфейсін аламыз, бұл сізге баламалы коллекторларды жылдам және оңай біріктіруге мүмкіндік береді. JVM-ге өздерінің қоқыс жинағышын қосуды армандағандар бұл жақсартуға өте риза болады. [307] G1 қоқыс жинағышына арналған параллельді толық GC . JDK 9 жүйесінде G1 әдепкі қоқыс жинағыш болды, ал бұрын әдепкі қоқыс жинағыш бірнеше ағындар арқылы қоқысты жинай алатын Parallel GC болды. Енді G1 мұны да жасай алады; бұрын ол бір ағында жасады, бұл кейде қиындықтар туғызды. XX:ParallelGCThreads.
Айтпақшы, әзірлеушілер ағындар санын - [310] Application Class-Data Sharing параметрі арқылы конфигурациялай алады - Java 10-да қабылданған бұл әзірлеме жүктеу мен бақылауды жақсартады, бар Class Sharing (CDS) мүмкіндігін кеңейтеді. қолданбалы сыныптарды жалпы мұрағатта орналастыруға мүмкіндік беру. Class-Data Sharing немесе *class кеңейтімі бар файлдармен қысқа жұмыстарға арналған CDS. Бұл функция класстардың белгілі бір жиынын таңдауға, оларды өңдеуге және оларды арнайы мұрағатқа сығуға мүмкіндік береді. Мұның бәрі жадты сақтау үшін жасалады. Көбінесе JVM-дің әртүрлі даналары стандартты кітапханаға енгізілген бірдей сыныптарды жүктейді. Және CDS осы JVM даналарының барлығына бір мұрағатты онда орналасқан сыныптармен ортақ пайдалануға мүмкіндік береді. Бұл бағдарламаны жүктеу уақытын да, жадты пайдалануды да азайтады. Шындығында, CDS JVM іске қосу өнімділігін жақсартады және 5-нұсқадан бастап бірнеше JVM бір физикалық немесе виртуалды машинада жұмыс істеп тұрған кезде ресурс көлемін азайтады. Бірақ бұрын CDS пайдалану тек жүктеуші жүктегішпен шектелді. Енді Application CDS деп аталатын кеңейтілген нұсқасы басқа жүктеушілер үшін сыныптары бар арнайы мұрағаттарды жүктеуге мүмкіндік береді. [312] Thread-Local Handshakes – JVM ішіндегі айтарлықтай төмен деңгейлі өзгеріс, ол кері шақыруларды жаһандық VM қауіпсіздік нүктесін іске қоспай-ақ ағындар бойынша орындауға мүмкіндік береді. Бұл бір уақытта (немесе мүлде жоқ) емес, жеке ағындарды шығынсыз тоқтатуға мүмкіндік береді. [313] Негізгі тақырыпты жасау құралын (javah) жойыңыз . Java 9-да тіл әзірлеушілері қажетсіз құралдарды белсенді түрде жоюға кірісті және JEP 313 бұл жақсы жұмысты жалғастыруда. Егер codeта жергілікті әдістер болса, javah құралы JNI тақырыптарын жасайды. Сау ма? Әрине, бірақ JDK 8 бастап жергілікті javac компиляторы JNI тақырыптарын жасай алады. Енді олар жавадан құтылуды шешті. Айтпақшы, қазіргі уақытта Панама жобасы әзірленуде , ол, атап айтқанда, JNI-ді алмастыра алады. [314] Қосымша Юниcode тілінің тег кеңейтімдері Бұл өзгерту BCP 47 тіл тегтеріне қосымша Юниcode кеңейтімдерін енгізу үшін java.util.Locale сыныбын және байланысты API интерфейстерін жақсартуға арналған. Атап айтқанда, валюта түріне арналған тегтер (cu), бірінші күн енді апта (fw), аймақ (rg) және уақыт белдеуі (tz) қайта анықтауларына қолдау көрсетіледі. [316] Баламалы жад құрылғыларындағы үймелерді бөлу Бұл жаңалық DRAM-дан басқа жад түрлерін пайдаланатындарға көмектеседі. Технологиялар үнемі өзгеріп отыратындықтан, DRAM-ға ұқсас интерфейсі мен өнімділік сипаттамалары бар тұрақты жадты пайдалану бүгінгі күні an objectивті шындық болып табылады. Осылайша, JEP 316 JVM-ге жадтың басқа түрлеріне үйінді орналастыруға мүмкіндік береді. [317] Эксперименттік Java негізіндегі JIT компиляторы . Жақында Java-да JVM-дің көп бөлігін қайта жазуды ұсынатын Metropolis жобасы жарияланды. Егер сіз білмесеңіз, ағымдағы нұсқа C++ тілінде жазылған. Егер сіз бұрыннан білетін болсаңыз, алдымен мұндай идея сізге оғаш болып көрінуі мүмкін. JVM Java тілінде жазылғандықтан, JVM іске қосу үшін сізге JVM қажет емес пе? Бір-біріне қарама-қарсы айналарды еске түсіретін рекурсия осындай. Дегенмен, шындық сәл басқаша: JVM Java тілінде жазылғандықтан, бұл оны byte codeтарына құрастыру керек дегенді білдірмейді. Сіз шын мәнінде AOT компиляциясын пайдалана аласыз, содан кейін JIT өнімділікті жақсарту үшін жұмыс істейтіндіктен codeты құрастырады.
Java codeын құрастыру үшін әдетте javac сияқты құрал қолданылады. Ол Java бағдарламасын byte codeтары бар класс файлдарының жинағына түрлендіреді. Содан кейін JVM сіздің byte codeыңызды іске қосады және оның аудармашысы оларды процессор нұсқауларына түрлендіреді. Интерпретатордан басқа, JVM-де кірістірілген компилятор да бар және ол сонымен қатар byte codeтан процессорға нұсқаулар жасай алады. Бұл іске қосу кезіндегі компиляция, орындау уақытының компиляциясы деп аталады. Әдетте жиі қолданылатын code осындай компиляцияға ұшырайды - бұл өнімділікті жақсартады. Компилятор әрекеттерді әртүрлі тәсілдермен орындай алады: 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
, көрсетілген codeтау арқылы byteтарды деcodeтау арқылы буфер мазмұнын жолға түрлендіреді. -
java.io.PrintStream және lang.io.PrintWriter:
Бұл сыныптардың екеуінде де қосымша аргумент қабылдайтын үш жаңа конструктор бар
charset
. -
java.io.Reader:
long transferTo (Writer)
: Осы оқырманның барлық кейіпкерлерін оқиды және кейіпкерлерді берілген жазушыға оқу ретімен жазады. -
java.lang.Runtime.Version:
Жол өрістерінің жаңа нұсқасы (JEP 322) үшін бүтін мәнді қайтаратын төрт жаңа әдіс:
feature ()
,interim ()
,patch ()
жәнеupdate ()
. -
java.lang.StackWalker.StackFrame:
-
getDescriptor() жолы:
Java виртуалды машинасының сипаттамасымен анықталғандай осы стек жақтауымен ұсынылған әдіске дескрипторды қайтарады.
-
getMethodType() жолы:
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