Хусусиятҳои муҳими 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] Интерфейси партовҳои ҷамъоварӣ интерфейсе нест, ки онро таҳиягарон барои идоракунии ҷамъоварии ахлот истифода баранд. Ба ҷои ин, мо дар codeи сарчашмаи JVM интерфейси тозаи коллектори партовҳоро ба даст меорем, ки ба шумо имкон медиҳад коллекторҳои алтернативӣ зуд ва ба осонӣ ҳамҷоя кунед. Онҳое, ки орзу доштанд, ки ҷамъкунандаи партовҳои худро ба JVM илова кунанд, аз ин беҳбудӣ бештар хушнуд хоҳанд шуд. [307] Параллели пурраи GC барои коллектори партовҳои G1 . Дар JDK 9, G1 коллектори пешфарзи ахлот шуд, дар ҳоле ки қаблан коллектори партовҳои пешфарз Parallel GC буд, ки метавонад партовҳоро дар риштаҳои гуногун ҷамъ кунад. Акнун G1 ин корро низ карда метавонад, пештар онро дар як ришта иҷро мекард, ки баъзан душвориҳо меовард. Дар омади гап, таҳиягарон метавонанд бо истифода аз параметри - XX:ParallelGCThreads.
[310] Барномаи Синф-Маълумот Мубодилаи маълумот - ин таҳия, ки дар Java 10 қабул шудааст, боркунӣ ва пайгирии беҳтарро пешниҳод мекунад, хусусияти мавҷудаи мубодилаи синфро (CDS) васеъ мекунад. ки синфхои аризахо дар архиви умумй чойгир карда шаванд. Мубодилаи Class-Data ё CDS барои корҳои кӯтоҳ бо файлҳо бо тамдиди *класс. Ин функсия ба шумо имкон медиҳад, ки як қисми муайяни синфҳоро интихоб кунед, онҳоро коркард кунед ва онҳоро ба архиви махсус фишурда кунед. Ҳамаи ин барои сарфаи хотира анҷом дода мешавад. Аксар вақт намунаҳои гуногуни JVM ҳамон синфҳои дар китобхонаи стандартӣ дохилшударо бор мекунанд. Ва CDS ба ҳамаи ин мисолҳои JVM имкон медиҳад, ки архиви ягонаро бо синфҳои дар он ҷойгиршуда мубодила кунанд. Ин ҳам вақти боркунии барнома ва ҳам истифодаи хотираро кам мекунад. Дар асл, CDS иҷрои JVM-ро беҳтар мекунад ва ҳангоми кор кардани JVM-ҳои сершумор дар як мошини физикӣ ё виртуалӣ аз versionи 5 сар карда, изофаи захираҳоро коҳиш медиҳад. Аммо қаблан истифодаи CDS танҳо бо боркунаки пурборкунанда маҳдуд буд. Акнун versionи васеъшуда бо номи Application CDS ба шумо имкон медиҳад, ки бойгониҳои махсусро бо синфҳо барои боркунакҳои дигар бор кунед. [312] Дастфишориҳои риштаи маҳаллӣ як тағироти сатҳи пасти дохor JVM мебошад, ки имкон медиҳад зангҳои бозпас дар байни риштаҳо бидуни иҷро кардани нуқтаи бехатарии глобалии VM иҷро шаванд. Ин ба шумо имкон медиҳад, ки риштаҳои инфиродӣ, на ҳамаро якбора қатъ кунед (ё тамоман). [313] Воситаи тавлиди сарлавҳаи аслӣ (javah) -ро хориҷ кунед . Дар Java 9, таҳиягарони забон ба хориҷ кардани асбобҳои нолозим оғоз карданд ва JEP 313 ин кори хайрро идома медиҳад. Воситаи javah сарлавҳаҳои JNI тавлид мекунад, агар дар code усулҳои маҳаллӣ вуҷуд дошта бошанд. Солим? Албатта, аммо компилятори Javac ватанӣ, ки аз JDK 8 сар карда, метавонад худаш сарлавҳаҳои JNI тавлид кунад. Инак, акнун онхо карор доданд, ки аз чавои халос шаванд. Дар омади гап, дар айни замон лоиҳаи Панама таҳия карда мешавад , ки аз ҷумла метавонад JNI-ро иваз кунад. [314] Васеъкунии иловагии забони Юниcode-Тагҳои ин тағирот барои беҳтар кардани синфи java.util.Locale ва API-ҳои алоқаманд барои татбиқи васеъшавии иловагии Юниcode ба барчаспҳои забони BCP 47 пешбинӣ шудааст. Аз ҷумла, барчаспҳо барои навъи асъор (cu), рӯзи аввал Акнун бекоркунии ҳафта (fw), минтақа (rg) ва минтақаи вақт (tz) дастгирӣ карда мешавад. [316] Тақсимоти теппа дар дастгоҳҳои хотираи алтернативӣ Ин навоварӣ ба онҳое, ки намудҳои хотираи ғайр аз DRAM истифода мебаранд, кӯмак хоҳад кард. Азбаски технологияҳо доимо тағйир меёбанд, истифодаи хотираи ғайрифаъол бо ҳамон интерфейс ва хусусиятҳои иҷроиш, ки ба DRAM монанд аст, имрӯз воқеияти an objectивӣ мебошад. Ҳамин тавр, JEP 316 ба JVM имкон медиҳад, ки теппаро дар дигар намудҳои хотира ҷойгир кунад. [317] Мураттиби таҷрибавии JIT дар асоси Java . Лоиҳаи Metropolis ба наздикӣ эълон карда шуд, ки пешниҳод мекунад, ки қисми зиёди JVM дар Java аз нав навишта шавад. Агар шумо намедонистед, versionи ҷорӣ дар C++ навишта шудааст. Хуб, агар шумо аллакай огоҳ бошед, эҳтимол дар аввал чунин идея барои шумо аҷиб менамояд. Азбаски JVM дар Java навишта шудааст, оё ба шумо JVM лозим нест, ки JVM-ро идора кунед? Чунин аст рекурсия, ки оинаҳои муқобor ҳамдигарро ба хотир меорад. Бо вуҷуди ин, воқеият каме фарқ мекунад: танҳо азбаски JVM дар Java навишта шудааст, ин маънои онро надорад, ки шумо бояд онро ба byte codeҳо тартиб диҳед. Шумо воқеан метавонед маҷмӯи AOT-ро истифода баред ва пас JIT codeро тартиб медиҳад, зеро он барои беҳтар кардани кор кор мекунад.
Асбоби монанди javac одатан барои тартиб додани codeи Java истифода мешавад. Он барномаи Java-ро ба маҷмӯи файлҳои синфӣ бо bytecodeҳо табдил медиҳад. Минбаъд, JVM bytecodeи шуморо иҷро мекунад ва тарҷумони он онҳоро ба дастурҳои протсессор табдил медиҳад. Илова ба тарҷумон, JVM инчунин компилятори дарунсохт дорад ва он инчунин метавонад барои протсессор аз byte code дастурҳо эҷод кунад. Ин ба истилоҳ compilation time run, compilation in startup мебошад. Одатан, 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.Toolkit
int getMenuShortcutKeyMaskEx ()
: Муайян мекунад, ки кадом калиди тағирдиҳандаи васеъ калиди суръатбахши мувофиқ барои менюи миёнабур аст. -
java.awt.geom.Path2D:
void trimToSize ()
: Иқтидори ин мисолроPath2D
ба андозаи ҷории он кам мекунад. Барнома метавонад ин амалро барои кам кардани нигоҳдории роҳ истифода барад. Ҳамин усул ба синфҳои дохилӣPath2D.Double
ваPath2D.Float
. -
java.io.ByteArrayOutputStream:
String toString (Charset)
: изофаборшудаtoString
, мундариҷаи буферро бо роҳи рамзкушоӣ кардани byteҳо бо истифода аз рамзгузории муайяншуда ба сатр табдил медиҳад. -
java.io.PrintStream ва lang.io.PrintWriter:
Ҳардуи ин синфҳо се конструктори нав доранд, ки далели иловагӣ мегиранд
charset
. -
java.io.Reader:
long transferTo (Writer)
: Ҳама аломатҳои ин хонандаро мехонад ва қаҳрамонҳоро ба нависандаи додашуда бо тартиби хонданашон менависад. -
java.lang.Runtime.Version:
Чор усули нав, ки арзиши бутунро барои 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