JavaRush /Java Blog /Random-TL /Bagong Java... Muli... Kilalanin ang Java 10

Bagong Java... Muli... Kilalanin ang Java 10

Nai-publish sa grupo
Dati, naghintay ang mga developer ng bagong Java sa loob ng ilang taon, ang ilan ay may katatakutan, at ang ilan ay may pag-asa. Nagbago ang mga panahon, at ang mga bagong bersyon ng JDK ay magpapasaya sa atin tuwing anim na buwan. Kung hindi pa malinaw sa iyo kung ano ang hahantong nito, tingnan ang opinyon ng eksperto , at dito namin ililista ang mga pangunahing pagbabago sa Java 10, ang pinakabagong bersyon ng aming paboritong wika. Bagong Java... Muli... Kilalanin ang Java 10 - 1Sa mga square bracket bago ang bagong "feature" ang JEP number ay ipinahiwatig, iyon ay, "JDK Enchancement Proposal". Ang JEP ay isang panukala upang mapabuti ang OpenJDK at maaaring maaprubahan, maantala, o tanggihan. Iyon ay, sa esensya, ang isang koleksyon ng mga JEP ay isang diskarte sa pag-unlad para sa OpenJDK.

Mga mahahalagang tampok ng Java 10

[286] Local-Variable Type Inference - Isang panukalang ipakilala ang var keyword sa Java, na inaalis ang pangangailangan na tahasang tukuyin ang uri ng lokal na variable. Iyon ay, ngayon ay hindi mo maaaring tukuyin ang uri ng inisyal na variable, ngunit sumulat ng isang bagay tulad ng:
var list = new ArrayList<String>();  //перед нами ArrayList<String>
var stream = list.stream();          // перед нами Stream<String>
Tinatanggal nito ang pagdoble ng kahulugan ng uri ng ArrayList<String> na kailangan sana nating gamitin noon. Nakatutuwang tandaan na ang var ay hindi nagiging isang keyword, ngunit ito ay isang nakareserbang uri. Iyon ay, maaari mong gamitin ang var bilang pangalan ng isang variable, paraan, o package. Ngunit hindi mo mapapangalanan ang klase sa ganoong paraan (kawawa naman!). [296] Pinagsasama ang kagubatan ng JDK sa isang solong imbakan . May walong repository ang JDK 9 - root, corba, hotspot, jaxp, jaxws, jdk, langtools, nashorn. Sa Java 10, ang buong kagubatan na ito ay pagsasama-samahin sa iisang repositoryo upang gawing posible ang paggawa ng mga atomic commit sa mga repositoryo ng mga magkakaugnay na pagbabago. [304] Ang Interface ng Garbage-Collector ay hindi isang interface na maaaring gamitin ng mga developer upang kontrolin ang pangongolekta ng basura. Sa halip, nakakakuha kami ng malinis na interface ng kolektor ng basura sa source code ng JVM, na nagbibigay-daan sa iyong mabilis at madaling pagsamahin ang mga alternatibong kolektor. Ang mga nangarap na magdagdag ng sarili nilang basurero sa JVM ay lubos na ikalulugod sa pagpapahusay na ito. [307] Parallel Full GC para sa G1 garbage collector . Sa JDK 9, naging default na kolektor ng basura ang G1, samantalang dati ang default na kolektor ng basura ay Parallel GC, na maaaring mangolekta ng basura sa maraming thread. Ngayon ay magagawa rin ito ng G1; dati ay ginawa ito sa isang thread, na kung minsan ay nagdudulot ng mga paghihirap. Sa pamamagitan ng paraan, magagawa ng mga developer na i-configure ang bilang ng mga thread gamit ang - XX:ParallelGCThreads. [310] Application Class-Data Sharing parameter - ang development na ito, na pinagtibay sa Java 10, ay nag-aalok ng pinahusay na paglo-load at pagsubaybay, pinapalawak ang umiiral na Class Sharing (CDS) feature upang payagan ang mga klase ng aplikasyon na matatagpuan sa pangkalahatang archive. Class-Data Sharing o CDS para sa maiikling gawa sa mga file na may *class extension. Binibigyang-daan ka ng function na ito na pumili ng isang partikular na subset ng mga klase, iproseso ang mga ito at i-compress ang mga ito sa isang espesyal na archive. Ang lahat ng ito ay ginagawa upang makatipid ng memorya. Kadalasan ang iba't ibang mga pagkakataon ng JVM ay naglo-load ng parehong mga klase na kasama sa karaniwang library. At pinapayagan ng CDS ang lahat ng mga pagkakataong ito ng JVM na magbahagi ng isang archive na may mga klase na nakalagay dito. Binabawasan nito ang parehong oras ng paglo-load ng programa at paggamit ng memorya. Sa katunayan, pinapabuti ng CDS ang pagganap ng startup ng JVM at binabawasan ang resource footprint kapag maraming JVM ang tumatakbo sa parehong pisikal o virtual na makina, simula sa bersyon 5. Ngunit mas maaga ang paggamit ng CDS ay limitado sa bootstrap loader lamang. Ngayon ang pinahabang bersyon na tinatawag na Application CDS ay nagbibigay-daan sa iyo na mag-load ng mga espesyal na archive na may mga klase para sa iba pang mga loader. [312] Ang Thread-Local Handshakes ay isang medyo mababang antas na pagbabago sa loob ng JVM na magpapahintulot sa mga callback na maisagawa sa mga thread nang hindi nagpapatakbo ng pandaigdigang punto ng kaligtasan ng VM. Ito ay magbibigay-daan sa iyo na walang gastos na ihinto ang mga indibidwal na mga thread, sa halip na sabay-sabay (o wala sa lahat). [313] Alisin ang Native-Header Generation Tool (javah) . Bumalik sa Java 9, nagsimulang aktibong alisin ng mga developer ng wika ang mga hindi kinakailangang tool, at ipinagpatuloy ng JEP 313 ang magandang gawaing ito. Ang javah tool ay bumubuo ng mga header ng JNI kung mayroong mga katutubong pamamaraan sa code. malusog? Siyempre, ngunit ang katutubong javac compiler, simula sa JDK 8, ay maaaring makabuo mismo ng mga header ng JNI. Kaya ngayon ay nagpasya silang tanggalin si javah. Sa pamamagitan ng paraan, ang proyekto ng Panama ay kasalukuyang binuo , na, sa partikular, ay maaaring palitan ang JNI. [314] Karagdagang Unicode Language-Tag Extension Ang pagbabagong ito ay nilayon upang mapabuti ang java.util.Locale class at mga nauugnay na API upang ipatupad ang karagdagang mga extension ng Unicode sa mga tag ng wika ng BCP 47. Sa partikular, ang mga tag para sa uri ng pera (cu), unang araw susuportahan na ngayon ang mga override ng linggo (fw), rehiyon (rg) at time zone (tz). [316] Heap Allocation sa Alternative Memory Devices Ang inobasyong ito ay makakatulong sa mga gumagamit ng mga uri ng memory maliban sa DRAM. Dahil ang mga teknolohiya ay patuloy na nagbabago, ang paggamit ng non-volatile memory na may parehong interface at mga katangian ng pagganap na katulad ng DRAM ay isang layunin na katotohanan ngayon. Kaya, pinapayagan ng JEP 316 ang JVM na maglagay ng isang bunton sa iba pang mga uri ng memorya. [317] Pang-eksperimentong Java-Based JIT Compiler . Ang proyekto ng Metropolis ay inihayag kamakailan, na nagmumungkahi na muling isulat ang karamihan sa JVM sa Java. Kung sakaling hindi mo alam, ang kasalukuyang bersyon ay nakasulat sa C++. Buweno, kung alam mo na, marahil sa una ang gayong ideya ay tila kakaiba sa iyo. Dahil ang JVM ay nakasulat sa Java, hindi mo ba kailangan ng JVM upang patakbuhin ang JVM? Ganyan ang recursion, nakapagpapaalaala sa mga salamin sa tapat ng bawat isa. Gayunpaman, ang katotohanan ay medyo naiiba: dahil lamang ang JVM ay nakasulat sa Java, hindi iyon nangangahulugan na kailangan mong i-compile ito sa mga bytecode. Maaari mong aktwal na gumamit ng AOT compilation at pagkatapos ay kino-compile ng JIT ang code habang gumagana ito upang mapabuti ang pagganap.

Ang isang tool tulad ng javac ay karaniwang ginagamit upang mag-compile ng Java code. Kino-convert nito ang isang Java program sa isang set ng mga class file na may mga bytecode. Susunod, pinapatakbo ng JVM ang iyong bytecode at iko-convert ng interpreter nito ang mga ito sa mga tagubilin ng processor. Bilang karagdagan sa interpreter, ang JVM ay mayroon ding built-in na compiler, at maaari rin itong lumikha ng mga tagubilin para sa processor mula sa bytecode. Ito ang tinatawag na runtime compilation, compilation sa panahon ng startup. Karaniwan ang code na madalas na ginagamit ay napapailalim sa naturang compilation - pinapabuti nito ang pagganap.

Ang compiler ay maaaring magsagawa ng mga aksyon sa iba't ibang paraan: JIT compilation (just-in-time) - dynamic, right during program execution, o AOT compilation (ahead-of-time) - bago ang execution.

Ang jaotc AOT compiler ay ipinakilala sa JDK 9. Sa kasalukuyan, ang Hotspot JVM ay naglalaman ng dalawang JIT compiler, C1 (para sa bilis) at C2 (para sa pag-optimize).

Ipinakilala ng JEP 317 ang Graal research project, isang compiler para sa JDK. Ito ay isang tiyak na batayan na makakatulong na gawing realidad ang Metropolis at paganahin ang JVM na tumugma (o mas mabuti pa, lumampas) sa kasalukuyang bersyon na nakasulat sa C++ sa pagganap. [319] Ang Mga Root Certificate ay ang default na hanay ng mga karaniwang Certification Authority (CA) na mga certificate sa JDK. Ang mga kritikal na bahagi ng seguridad tulad ng TLS ay gagana na ngayon bilang default sa mga build ng OpenJDK. Ang kapaki-pakinabang na karagdagan na ito ay malamang na bahagi ng ginagawa ng Oracle upang matiyak na ang OpenJDK binary at Oracle JDK binary ay gumagana nang pareho. [322] Time-Based Release Versioning - sa Java 10, ang mga bagong feature ay idaragdag sa Feature releases, at ang mga bug ay aayusin sa Update Releases. Sa totoo lang, mayroon kaming bagong paraan upang magtakda ng mga format ng string ng bersyon ng JDK. Inaayos nito ang medyo kakaibang sitwasyon sa JDK 9. Ang unang update ay JDK 9.0.1, na medyo lohikal. Ang pangalawang update ay JDK 9.0.4, na hindi makatwiran. Ang lohika ay na sa loob ng scheme ng pagnunumero ng bersyon ng JDK 9, natitira ang espasyo sa pagitan ng mga update kung sakaling magkaroon ng emergency, hindi planadong pag-update. Dahil hindi kailangan ang pag-update, bakit hindi na lang ito tawaging JDK 9.0.2? At narito ang hitsura ng bagong format ng bersyon ng Java:
[1-9][0-9]*((\.0)*\.[1-9][0-9]*)*

Mga bagong API

Mayroong 73 mga karagdagan sa JDK 10 karaniwang mga aklatan ng klase.
  • java.awt.Toolkit

    int getMenuShortcutKeyMaskEx (): Tinutukoy kung aling extended modifier key ang katumbas na accelerator key para sa shortcut menu.

  • java.awt.geom.Path2D:

    void trimToSize (): Pinuputol ang kapasidad ng pagkakataong ito Path2Dsa kasalukuyang laki nito. Maaaring gamitin ng isang application ang operasyong ito upang mabawasan ang imbakan ng landas. Ang parehong paraan ay idinagdag sa mga panloob na klase Path2D.Doubleat Path2D.Float.

  • java.io.ByteArrayOutputStream:

    String toString (Charset): overloaded toString, kino-convert ang mga nilalaman ng isang buffer sa isang string sa pamamagitan ng pag-decode ng mga byte gamit ang tinukoy na pag-encode.

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

    Ang parehong mga klase ay may tatlong bagong constructors na kumuha ng karagdagang argumento charset.

  • java.io.Reader:

    long transferTo (Writer): Binabasa ang lahat ng mga karakter mula sa mambabasang ito at isinusulat ang mga karakter sa ibinigay na manunulat sa pagkakasunud-sunod kung saan sila binasa.

  • java.lang.Runtime.Version:

    Apat na bagong pamamaraan na nagbabalik ng integer value para sa bagong bersyon (JEP 322) ng mga string field: feature (), interim (), patch ()at update ().

  • java.lang.StackWalker.StackFrame:

  • String getDescriptor():

    nagbabalik ng handle sa paraang kinakatawan ng stack frame na ito, gaya ng tinukoy ng Java Virtual Machine Specification.

  • String getMethodType():

    returns MethodType, na kumakatawan sa mga uri ng parameter at uri ng pagbabalik para sa pamamaraang kinakatawan ng stack frame.

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

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