JavaRush /Blog Jawa /Random-JV /Jawa Anyar... Maneh... Ketemu Jawa 10

Jawa Anyar... Maneh... Ketemu Jawa 10

Diterbitake ing grup
Sadurungé, pangembang ngenteni Jawa anyar nganti pirang-pirang taun, ana sing medeni, lan ana sing ngarep-arep. Wektu wis diganti, lan versi anyar saka JDK bakal nyenengake kita saben nem sasi. Yen sampeyan durung ngerti apa sing bakal ditindakake, priksa pendapat pakar , lan ing kene kita bakal nampilake owah-owahan utama ing Jawa 10 - versi paling anyar saka basa favorit. Jawa Anyar... Maneh... Ketemu Jawa 10 - 1Ing kurung kothak sadurunge "fitur" anyar nomer JEP dituduhake, yaiku, "JDK Enchancement Proposal". JEP minangka proposal kanggo nambah OpenJDK lan bisa disetujoni, ditundha, utawa ditolak. Sing, ing intine, koleksi JEP minangka strategi pangembangan kanggo OpenJDK.

Ciri-ciri penting basa Jawa 10

[286] Inferensi Tipe Variabel Lokal - Proposal kanggo ngenalake tembung kunci var menyang Jawa, ngilangi kebutuhan kanggo nemtokake kanthi jelas jinis variabel lokal. Yaiku, saiki sampeyan ora bisa nemtokake jinis variabel sing diinisialisasi, nanging nulis kaya:

var list = new ArrayList<String>();  //перед нами ArrayList<String>
var stream = list.stream();          // перед нами Stream<String>
Iki ngilangi duplikasi definisi jinis ArrayList<String> sing kudu digunakake sadurunge. Iku menarik kanggo Wigati sing var ora dadi tembung kunci, nanging jinis reserved. Yaiku, sampeyan bisa nggunakake var minangka jeneng variabel, metode, utawa paket. Nanging sampeyan ora bakal bisa menehi jeneng kelas kasebut (apa rugi!). [296] Nggabungake alas JDK dadi siji gudang . JDK 9 duwe wolung repositori - root, corba, hotspot, jaxp, jaxws, jdk, langtools, nashorn. Ing Jawa 10, kabeh alas iki bakal digabung dadi siji gudang supaya bisa nindakake atomic commit ing repositori saka owah-owahan sing saling gumantung. [304] Antarmuka Pengumpul Sampah dudu antarmuka sing bisa digunakake para pangembang kanggo ngontrol pangumpulan sampah. Nanging, kita entuk antarmuka kolektor sampah sing resik ing kode sumber JVM, supaya sampeyan bisa nggabungake kolektor alternatif kanthi cepet lan gampang. Wong-wong sing ngimpi nambah sampah dhewe menyang JVM bakal paling seneng karo perbaikan iki. [307] GC Lengkap Paralel kanggo pengumpul sampah G1 . Ing JDK 9, G1 dadi pengumpul sampah standar, dene sadurunge pengumpul sampah standar yaiku Parallel GC, sing bisa ngumpulake sampah ing pirang-pirang benang. Saiki G1 uga bisa nindakake iki; sadurunge nindakake ing siji utas, sing kadhangkala nyebabake kesulitan. Miturut cara, pangembang bakal bisa ngatur jumlah utas nggunakake - XX:ParallelGCThreads. [310] Parameter Kelas-Data Sharing Aplikasi - pangembangan iki, diadopsi ing Jawa 10, nawakake loading lan nelusuri sing luwih apik, ngluwihi fitur Class Sharing (CDS) sing wis ana. kanggo ngidini kelas aplikasi dumunung ing arsip umum. Kelas-Data Sharing utawa CDS kanggo karya singkat karo file karo ekstensi kelas *. Fungsi iki ngidini sampeyan milih subset kelas tartamtu, ngolah lan ngompres menyang arsip khusus. Kabeh iki rampung kanggo nyimpen memori. Asring beda kedadean saka JVM mbukak kelas padha klebu ing perpustakaan standar. Lan CDS ngidini kabeh kedadean JVM iki kanggo nuduhake arsip siji karo kelas diselehake ing. Iki nyuda wektu loading program lan panggunaan memori. Nyatane, CDS nambah kinerja wiwitan JVM lan nyuda jejak sumber daya nalika sawetara JVM mlaku ing mesin fisik utawa virtual sing padha, diwiwiti karo versi 5. Nanging sadurunge nggunakake CDS diwatesi mung bootstrap loader. Saiki versi lengkap sing disebut CDS Aplikasi ngidini sampeyan mbukak arsip khusus karo kelas kanggo loader liyane. [312] Thread-Local Handshakes minangka owah-owahan tingkat sing cukup sithik ing JVM sing bakal ngidini callback bisa dileksanakake ing benang tanpa nganggo titik safety VM global. Iki bakal ngidini sampeyan mungkasi thread individu tanpa biaya, tinimbang kabeh bebarengan (utawa ora ana). [313] Copot Native-Header Generation Tool (javah) . Mbalik ing Jawa 9, pangembang basa wiwit aktif mbusak alat sing ora perlu, lan JEP 313 nerusake karya sing apik iki. Alat javah ngasilake header JNI yen ana cara asli ing kode kasebut. Sehat? Mesthine, nanging kompiler javac asli, diwiwiti karo JDK 8, bisa ngasilake header JNI. Mula saiki padha mutusake kanggo nyingkirake javah. Miturut cara, proyek Panama saiki lagi dikembangake , sing, utamane, bisa ngganti JNI. [314] Ekstensi Tag Basa Unicode Tambahan Owah-owahan iki ditujokake kanggo ngapikake kelas java.util.Locale lan API sing gegandhengan kanggo ngleksanakake ekstensi Unicode tambahan kanggo tag basa BCP 47. Utamane, tag kanggo jinis mata uang (cu), dina pisanan saiki bakal didhukung minggu (fw), wilayah (rg) lan zona wektu (tz) overrides. [316] Alokasi Heap ing Piranti Memori Alternatif Inovasi iki bakal mbantu sing nggunakake jinis memori liyane saka DRAM. Wiwit teknologi saya ganti, panggunaan memori sing ora molah malih kanthi antarmuka lan karakteristik kinerja sing padha karo DRAM minangka kasunyatan objektif saiki. Dadi, JEP 316 ngidini JVM nempatake tumpukan ing jinis memori liyane. [317] Kompiler JIT Berbasis Jawa Eksperimental . Proyek Metropolis bubar diumumake, sing ngusulake nulis ulang sebagian besar JVM ing Jawa. Yen sampeyan ora ngerti, versi saiki ditulis ing C ++. Inggih, yen sampeyan wis ngerti, mbokmenawa ing wiwitan gagasan kasebut bakal katon aneh kanggo sampeyan. Wiwit JVM ditulis ing Jawa, sampeyan ora butuh JVM kanggo mbukak JVM? Kuwi rekursi, kaya pangilon sing ngelawan. Nanging, kasunyatane rada beda: mung amarga JVM ditulis ing Jawa, ora ateges sampeyan kudu nglumpukake dadi bytecode. Sampeyan bisa nggunakake kompilasi AOT banjur JIT nglumpukake kode kasebut amarga bisa nambah kinerja.

Piranti kayata javac umume digunakake kanggo ngumpulake kode Jawa. Ngonversi program Java dadi sakumpulan file kelas kanthi bytecodes. Sabanjure, JVM mbukak bytecode lan interpreter ngowahi dadi instruksi prosesor. Saliyane interpreter, JVM uga wis dibangun ing compiler, lan uga bisa nggawe instruksi kanggo prosesor saka bytecode. Iki sing diarani kompilasi runtime, kompilasi nalika wiwitan. Biasane kode sing paling kerep digunakake kanggo kompilasi kuwi - iki nambah kinerja.

Compiler bisa nindakake tumindak kanthi cara sing beda-beda: kompilasi JIT (just-in-time) - dinamis, pas sajrone eksekusi program, utawa kompilasi AOT (ahead-of-time) - sadurunge eksekusi.

Compiler AOT jaotc dikenalaké ing JDK 9. Saiki, JVM Hotspot ngemot loro kompiler JIT, C1 (kanggo kacepetan) lan C2 (kanggo optimalisasi).

JEP 317 ngenalake proyek riset Graal, kompiler kanggo JDK. Iki minangka basis tartamtu sing bakal mbantu Metropolis dadi kasunyatan lan ngaktifake JVM kanggo cocog (utawa luwih apik, ngluwihi) versi saiki sing ditulis ing C ++ ing kinerja. [319] Sertifikat Root minangka set standar sertifikat Otoritas Sertifikasi (CA) standar ing JDK. Komponen keamanan kritis kayata TLS saiki bakal bisa digunakake kanthi standar ing OpenJDK mbangun. Tambahan sing migunani iki minangka bagean saka apa sing ditindakake Oracle kanggo mesthekake yen binari OpenJDK lan binari Oracle JDK kanthi fungsi padha. [322] Versi Rilis Berbasis Wektu - ing Jawa 10, fitur-fitur anyar bakal ditambahake menyang Rilis Fitur, lan bug bakal didandani ing Rilis Update. Ateges, kita duwe cara anyar kanggo nyetel format string versi JDK. Ndandani kahanan sing rada aneh karo JDK 9. Nganyari pisanan yaiku JDK 9.0.1, sing cukup logis. Nganyari kapindho yaiku JDK 9.0.4, sing ora logis. Logika kasebut yaiku ing skema penomoran versi JDK 9, spasi ditinggalake ing antarane nganyari yen ana darurat, nganyari sing ora direncanakake. Wiwit nganyari ora perlu, kok ora mung nelpon JDK 9.0.2? Mangkene format versi Java anyar:

[1-9][0-9]*((\.0)*\.[1-9][0-9]*)*

API anyar

Ana 73 tambahan ing perpustakaan kelas standar JDK 10.
  • java.awt.Toolkit

    int getMenuShortcutKeyMaskEx (): Nemtokake tombol modifier sing ditambahi minangka tombol akselerator sing cocog kanggo menu trabasan.

  • java.awt.geom.Path2D:

    void trimToSize (): Trims kapasitas Kayata iki Path2Dkanggo ukuran saiki. Aplikasi bisa nggunakake operasi iki kanggo nyilikake panyimpenan path. Cara sing padha wis ditambahake ing kelas jero Path2D.Doublelan Path2D.Float.

  • java.io.ByteArrayOutputStream:

    String toString (Charset): overloaded toString, ngowahi isi buffer menyang senar dening dekoding bait nggunakake enkoding kasebut.

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

    Loro kelas kasebut duwe telung konstruktor anyar sing njupuk argumen tambahan charset.

  • java.io.Reader:

    long transferTo (Writer): Maca kabeh karakter saka maca iki lan nulis karakter kanggo penulis diwenehi ing urutan kang diwaca.

  • java.lang.Runtime.Versi:

    Papat cara anyar sing ngasilake nilai integer kanggo versi anyar (JEP 322) kolom string: feature (), interim (), patch ()lan update ().

  • java.lang.StackWalker.StackFrame:

  • String getDescriptor():

    ngasilake gagang kanggo cara dituduhake dening pigura tumpukan iki, minangka ditetepake dening Java Virtual Machine Specification.

  • String getMethodType():

    ngasilake MethodType, makili jinis parameter lan jinis bali kanggo cara dituduhake dening pigura tumpukan.

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

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