JavaRush /Java Blog /Random-TK /Täze Java ... Againene ... Java 10 bilen tanyşyň

Täze Java ... Againene ... Java 10 bilen tanyşyň

Toparda çap edildi
Ozal döredijiler täze Java-a birnäçe ýyl garaşdylar, käbiri gorkunç, käbiri umyt bilen. Döwür üýtgedi, JDK-nyň täze wersiýalary her alty aýdan bizi begendirer. Munuň nämä eltjekdigi entek belli däl bolsa, bilermeniň pikirini gözden geçiriň we bu ýerde halaýan dilimiziň iň täze wersiýasy bolan Java 10-daky esasy üýtgeşmeleri sanap geçeris. Täze Java ... Againene ... Java 10 - 1 bilen tanyşyňTäze “aýratynlyk” -dan öň kwadrat ýaýlarda JEP belgisi, ýagny “JDK Enhancement Teklip” görkezilýär. JEP OpenJDK-ny gowulandyrmak baradaky teklip bolup, tassyklanylyp, gijikdirilip ýa-da ret edilip bilner. .Agny, aslynda JEP-leriň ýygyndysy OpenJDK üçin ösüş strategiýasydyr.

Java 10-yň möhüm aýratynlyklary

] _ .Agny, indi başlanan üýtgeýjiniň görnüşini kesgitläp bilmersiňiz, ýöne bir zat ýazyp bilersiňiz:
var list = new ArrayList<String>();  //перед нами ArrayList<String>
var stream = list.stream();          // перед нами Stream<String>
Bu, öň ulanmaly boljak ArrayList <String> görnüş kesgitlemesiniň gaýtalanmagyny ýok edýär. Varyň açar söze öwrülmän, ätiýaçlandyrylan görnüşdigini bellemek gyzykly. Varagny, üýtgeýjiniň, usulyň ýa-da bukjanyň ady hökmünde var ulanyp bilersiňiz. Theöne synpy şeýle atlandyryp bilmersiňiz (nähili ýitgi!). [296] JDK tokaýyny bir ammarda birleşdirmek . JDK 9-da sekiz ammar bar - kök, corba, iň nokat, jaxp, jaxws, jdk, langtools, nashorn. Java 10-da bu tokaý, birek-birege bagly üýtgeşmeleriň ammarlarynda atom borçlaryny ýerine ýetirmek üçin bir ammarda birleşdiriler. [304] Zibil-kollektor interfeýsi, zibil ýygnamagyna gözegçilik etmek üçin döredijiler tarapyndan ulanyp boljak interfeýs däl. Munuň ýerine, alternatiw kollektorlary çalt we aňsat birleşdirmäge mümkinçilik berýän JVM deslapky kodynda arassa zibil ýygnaýjy interfeýsini alýarys. JVM-e öz hapa kollektoryny goşmagy arzuw edenler bu gowulaşmakdan iň hoşal bolarlar. [307] G1 hapa ýygnaýjy üçin parallel doly GC . JDK 9-da G1 deslapky hapa ýygnaýjy boldy, öňem hapa ýygnaýjy Parallel GC bolup, birnäçe sapakdan zibil ýygnap bilýärdi. Indi G1 muny hem edip biler, ozal bir kynçylykda sebäp bolýan bir sapakda edipdi. XX:ParallelGCThreads. Theeri gelende aýtsak, döredijiler - [310] Programma synpy maglumatlary paýlaşmak parametrini ulanyp, sapaklaryň sanyny düzüp bilerler - Java 10-da kabul edilen bu ösüş, ýüklemegi we yzarlamagy gowulandyrýar, bar bolan synp paýlaşmasy (CDS) aýratynlygyny giňeldýär. amaly sapaklaryň umumy arhiwde ýerleşmegine rugsat bermek. * Klass giňeldilen faýllar bilen gysga işler üçin synp maglumatlary paýlaşmak ýa-da CDS. Bu funksiýa sapaklaryň belli bir bölegini saýlamaga, olary gaýtadan işlemäge we ýörite arhiwde gysmaga mümkinçilik berýär. Bularyň hemmesi ýady tygşytlamak üçin edilýär. Köplenç JVM-iň dürli mysallary adaty kitaphana girýän şol bir synplary ýükleýär. CDS bu JVM mysallarynyň hemmesine ýerleşdirilen synplar bilen bir arhiwi paýlaşmaga mümkinçilik berýär. Bu programmanyň ýükleniş wagtyny we ýadyň ulanylyşyny azaldar. Aslynda, CDS JVM başlangyç işini gowulandyrýar we 5-nji wersiýasyndan başlap, köp sanly JVM şol bir fiziki ýa-da wirtual maşynda işleýän mahaly çeşmäniň yzyny azaldýar. Emma öň CDS-ni ulanmak diňe bootstrap ýükleýjisi bilen çäklenýärdi. Indi “Programma CDS” atly giňeldilen wersiýa beýleki ýükleýjiler üçin synplar bilen ýörite arhiwleri ýüklemäge mümkinçilik berýär. ] _ Bu, birbada däl (ýa-da asla ýok) däl-de, aýratyn sapaklary gymmatsyz saklamaga mümkinçilik berer. [313] -erli sözbaşy nesil guralyny (java) aýyryň . Java 9-da dil döredijiler gereksiz gurallary işjeň aýyryp başladylar we JEP 313 bu gowy işi dowam etdirýär. Javah guraly, kodda ýerli usullar bar bolsa JNI sözbaşylaryny döredýär. Sagdynmy? Elbetde, ýöne JDK 8-den başlap, ýerli javac düzüjiniň özi JNI sözbaşylaryny döredip biler. Şeýdip, indi java-dan dynmak kararyna geldiler. Theeri gelende aýtsak, häzirki wagtda JNI-ni çalşyp biljek Panama taslamasy işlenip düzülýär . ] _ indi hepde (fw), sebit (rg) we wagt zolagy (tz) artykmaçlygy goldanylar. [316] Alternatiw ýat enjamlaryna üýşmek Bu täzelik DRAM-dan başga ýat görnüşlerini ulanýanlara kömek eder. Tehnologiýalar yzygiderli üýtgäp durýandygy sebäpli, şol bir interfeýs we DRAM-a meňzeş öndürijilik aýratynlyklary bilen üýtgemeýän ýadyň ulanylmagy häzirki wagtda obýektiw hakykat. Şeýlelik bilen, JEP 316 JVM-e beýleki ýat görnüşlerine üýşmäge mümkinçilik berýär. [317] Synag Java-esasly JIT düzüjisi . JVM-leriň köpüsini Java-da täzeden ýazmagy teklip edýän Metropolis taslamasy ýakynda yglan edildi. Bilmedik bolsaňyz, häzirki wersiýa C ++ görnüşinde ýazylýar. Garaz, eýýäm bilýän bolsaňyz, başda beýle pikir size geň görüner. JVM Java-da ýazylanlygy sebäpli, JVM-i işletmek üçin JVM gerek bolmazmy? Biri-birine garşy aýnalary ýada salýan gaýtalanma. Şeýle-de bolsa, hakykat birneme üýtgeşik: diňe JVM Java-da ýazylanlygy sebäpli, ony bytekodlara düzmeli diýmek däl. Aslynda AOT ýygyndysyny ulanyp bilersiňiz, soň bolsa JIT öndürijiligi ýokarlandyrmak üçin işleýän ýaly kod düzýär.

Java koduny düzmek üçin javac ýaly gural köplenç ulanylýar. Java programmasyny bytekodlar bilen synp faýllarynyň toplumyna öwürýär. Ondan soň, JVM bytekodyňyzy işledýär we terjimeçisi olary prosessor görkezmelerine öwürýär. Terjimeçiden başga-da, JVM-de içerki düzüjisi bar we prosessor üçin bytekoddan görkezmeler döredip biler. Bu, iş wagtynyň düzülişi, başlangyç wagtynda düzmek diýilýär. Adatça köplenç ulanylýan kod şeýle ýygyndylara sezewar edilýär - bu öndürijiligi ýokarlandyrýar.

Düzediji hereketleri dürli usullar bilen ýerine ýetirip biler: JIT düzmek (wagtynda) - dinamiki, programma ýerine ýetirilende dogry ýa-da AOT düzmek (öňünden) - ýerine ýetirilmezden.

Jaotc AOT düzüjisi JDK 9-da hödürlendi. Häzirki wagtda Hotspot JVM-de iki sany JIT düzüjisi bar, C1 (tizlik üçin) we C2 (optimizasiýa üçin).

JEP 317, JDK üçin düzüji Graal gözleg taslamasy bilen tanyşdyrýar. Bu, Metropolisiň hakykata öwrülmegine we JVM-iň ýerine ýetirilişinde C ++ bilen ýazylan häzirki wersiýasyna gabat gelmegine (ýa-da has gowusy) geçmegine kömek etjek belli bir esas. [319] Kök şahadatnamalary, JDK-daky standart sertifikat edarasy (CA) şahadatnamalarynyň deslapky toplumy. TLS ýaly möhüm howpsuzlyk komponentleri indi OpenJDK gurluşlarynda işleýär. Bu peýdaly goşundy, “Oracle” -yň “OpenJDK” ikilikleriniň we “Oracle JDK” ikilikleriniň birmeňzeş bolmagyny üpjün etmek üçin edýän işleriniň bir bölegidir. ] _ Aslynda, JDK wersiýa formatlaryny düzmegiň täze usuly bar. JDK 9 bilen gaty geň ýagdaýy düzedýär. Ilkinji täzelenme JDK 9.0.1 boldy, bu gaty mantykly. Ikinji täzelenme, JDK 9.0.4, bu manysyz. Mantyk, JDK 9 wersiýa belgileme shemasynda, adatdan daşary, meýilleşdirilmedik täzelenme bolan ýagdaýynda täzelenmeleriň arasynda boş ýer galýar. Täzelenme zerur däldi, näme üçin ony diňe JDK 9.0.2 diýip atlandyrmaly däl? Ine, täze Java wersiýasynyň görnüşi:
[1-9][0-9]*((\.0)*\.[1-9][0-9]*)*

Täze API-ler

JDK 10 standart synp kitaphanalaryna 73 goşundy bar.
  • java.awt.Toolkit

    int getMenuShortcutKeyMaskEx (): Haýsy giňeldilen üýtgediji açaryň gysga menýu üçin degişli tizlendiriji açarydygyny kesgitleýär.

  • java.awt.geom.Path2D:

    void trimToSize (): Bu mysalyň göwrümini Path2Dhäzirki ululygyna görä kesgitleýär. Programma, amaly saklamagy azaltmak üçin bu amaly ulanyp biler. Içerki synplara şol bir usul goşuldy Path2D.Doublewe Path2D.Float.

  • java.io.ByteArrayOutputStream:

    String toString (Charset): aşa ýüklenen toString, görkezilen kodlamany ulanyp, baýtlary kodlamak arkaly buferiň mazmunyny setire öwürýär.

  • java.io.PrintStream we lang.io.PrintWriter:

    Bu synplaryň ikisinde-de goşmaça argument alýan üç sany täze konstruktor bar charset.

  • java.io.Okyjy:

    long transferTo (Writer): Bu okyjydan ähli nyşanlary okaýar we nyşanlary okalýan tertipde berlen ýazyja ýazýar.

  • java.lang.Runtime.Version:

    Setir meýdanlarynyň täze wersiýasy (JEP 322) üçin bitewi bahany yzyna gaýtaryp berýän dört täze usul : feature (), interim ()we .patch ()update ()

  • java.lang.StackWalker.StackFrame:

  • Setir getDescripttor ():

    Java wirtual maşyn spesifikasiýasy bilen kesgitlenişi ýaly, bu çarçuwanyň çarçuwasy bilen görkezilen usula gaýtaryp berýär.

  • Setir getMethodType ():

    MethodTypeparametr görnüşlerini we stakanyň çarçuwasy bilen görkezilen usul üçin gaýdyp beriş görnüşini görkezýär .

  • java.lang.invoke.Metod görnüşi:

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

Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION