JavaRush /Блоги Java /Random-TG /Java нав... Боз... Бо Java 10 шинос шавед

Java нав... Боз... Бо Java 10 шинос шавед

Дар гурӯҳ нашр шудааст
Пештар, таҳиягарон якчанд сол Java-и навро интизор буданд, баъзеҳо бо даҳшат ва баъзеҳо бо умед. Замонаҳо тағйир ёфтанд ва versionҳои нави JDK ҳар шаш моҳ моро шод хоҳанд кард. Агар ба шумо ҳанӯз маълум набошад, ки ин ба чӣ оварда мерасонад, хулосаи коршиносонро санҷед ва дар ин ҷо мо тағйироти асосиро дар Java 10 - versionи навтарини забони дӯстдоштаамон номбар мекунем. Java нав... Боз... Бо Java 10 - 1 вохӯредДар қавсҳои мураббаъ пеш аз "хусусияти" нав рақами JEP нишон дода шудааст, яъне "Пешниҳоди такмилдиҳии JDK". JEP пешниҳод барои такмил додани OpenJDK аст ва метавонад тасдиқ, таъхир ё рад карда шавад. Яъне, аслан маҷмӯи JEPҳо стратегияи рушд барои OpenJDK мебошад.

Хусусиятҳои муҳими 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 (барои оптимизатсия) мебошад.

JEP 317 лоиҳаи тадқиқотии Graal, як компилятор барои JDK -ро муаррифӣ мекунад. Ин як асоси муайянест, ки ба воқеият табдил додани Метрополис кӯмак мекунад ва ба JVM имкон медиҳад, ки versionи ҷории дар C++ дар иҷроиш мувофиқат кунад (ё беҳтараш, зиёдтар бошад). [319] Шаҳодатномаҳои решавӣ маҷмӯи пешфарзи сертификатҳои Authority Certification Authority (CA) дар JDK мебошанд. Ҷузъҳои муҳими амниятӣ ба монанди TLS ҳоло дар сохтани OpenJDK ба таври нобаёнӣ кор хоҳанд кард. Ин иловаи муфид эҳтимол як қисми корҳое бошад, ки Oracle барои таъмини он, ки бинарҳои OpenJDK ва Oracle JDK аз ҷиҳати функсионалӣ якхелаанд. [322] Варианти versionи вақт асосёфта - дар Java 10, хусусиятҳои нав ба релизҳои Хусусият илова карда мешаванд ва хатоҳо дар Варақаҳои Навсозӣ ислоҳ карда мешаванд. Аслан, мо як роҳи нави муқаррар кардани форматҳои сатри versionи JDK дорем. Он вазъияти хеле аҷибро бо JDK 9 ислоҳ мекунад. Навсозии аввал JDK 9.0.1 буд, ки комилан мантиқист. Навсозии дуюм JDK 9.0.4 аст, ки мантиқӣ нест. Мантиқ дар он аст, ки дар доираи нақшаи рақамгузории versionи JDK 9 дар байни навсозиҳо дар ҳолати фавқулодда ва навсозии ғайринақшавӣ фосила боқӣ мемонад. Азбаски навсозӣ зарур набуд, чаро онро танҳо JDK 9.0.2 меномед? Ва ин аст, ки формати versionи нави Java чӣ гуна аст:
[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 or Set, содержащие элементы данной коллекции, в своем порядке итерации.

  • 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): возвращает минимальный размер указанного компонента, подходящий для внешнего вида.

Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION