JavaRush /Java blogi /Random-UZ /Yangi Java... Yana... Java 10 bilan tanishing

Yangi Java... Yana... Java 10 bilan tanishing

Guruhda nashr etilgan
Ilgari ishlab chiquvchilar yangi Java-ni bir necha yil kutishgan, kimdir dahshat bilan, kimdir umid bilan. Vaqt o'zgardi va JDK ning yangi versiyalari har olti oyda bizni quvontiradi. Agar bu nimaga olib kelishi siz uchun hali aniq bo'lmasa, mutaxassisning fikrini tekshiring va bu erda biz sevimli tilimizning eng yangi versiyasi bo'lgan Java 10-dagi asosiy o'zgarishlarni sanab o'tamiz. Yangi Java... Yana... Java 10 - 1 bilan tanishingYangi "xususiyat" oldidan kvadrat qavs ichida JEP raqami ko'rsatilgan, ya'ni "JDK Enchancement Proposal". JEP OpenJDKni takomillashtirish taklifi boʻlib, tasdiqlanishi, kechiktirilishi yoki rad etilishi mumkin. Ya'ni, mohiyatan JEPlar to'plami OpenJDK uchun rivojlanish strategiyasidir.

Java 10 ning muhim xususiyatlari

[286] Lokal oʻzgaruvchi turini xulosa qilish – Java’ga var kalit soʻzini kiritish taklifi, mahalliy oʻzgaruvchi turini aniq koʻrsatish zaruriyatini yoʻq qiladi. Ya'ni, endi siz ishga tushirilgan o'zgaruvchining turini ko'rsata olmaysiz, lekin shunday yozing:
var list = new ArrayList<String>();  //перед нами ArrayList<String>
var stream = list.stream();          // перед нами Stream<String>
Bu biz ilgari ishlatishimiz kerak bo'lgan ArrayList<String> tipidagi ta'rifning takrorlanishini yo'q qiladi. Qizig'i shundaki, var kalit so'zga aylanmaydi, lekin zaxiralangan tur. Ya'ni, o'zgaruvchi, usul yoki paket nomi sifatida var dan foydalanishingiz mumkin. Ammo siz sinfni shunday nomlay olmaysiz (qanday yo'qotish!). [296] JDK o'rmonini bitta omborga birlashtirish . JDK 9 sakkizta omborga ega - root, corba, hotspot, jaxp, jaxws, jdk, langtools, nashorn. Java 10 da bu butun o'rmon bitta omborga birlashtirilib, o'zaro bog'liq o'zgarishlar to'plamlari omborlarida atomik majburiyatlarni bajarishga imkon beradi. [304] Axlat yigʻuvchi interfeysi ishlab chiquvchilar tomonidan axlat yigʻishni boshqarish uchun foydalaniladigan interfeys emas. Buning o'rniga biz JVM manba kodida toza axlat yig'uvchi interfeysga ega bo'lamiz, bu sizga muqobil kollektorlarni tez va oson birlashtirish imkonini beradi. JVM-ga o'zining axlat yig'uvchisini qo'shishni orzu qilganlar ushbu yaxshilanishdan mamnun bo'lishadi. [307] G1 axlat yig'uvchi uchun parallel to'liq GC . JDK 9 da G1 standart axlat yig'uvchiga aylandi, ilgari standart axlat yig'uvchi Parallel GC bo'lib, u axlatni bir nechta iplar bo'ylab to'plashi mumkin edi. Endi G1 buni ham qila oladi; ilgari u buni bir ipda bajargan, bu ba'zan qiyinchiliklarga olib keldi. Aytgancha, ishlab chiquvchilar mavzular sonini - XX:ParallelGCThreads. [310] Application Class-Ma'lumotlarni almashish parametri yordamida sozlashlari mumkin bo'ladi - Java 10 da qabul qilingan ushbu ishlanma yuklash va kuzatishni yaxshilaydi, mavjud Class Sharing (CDS) funksiyasini kengaytiradi. ilovalar sinflarini umumiy arxivda joylashtirishga ruxsat berish. Class-Data Sharing yoki *class kengaytmali fayllar bilan qisqacha ishlash uchun CDS. Bu funksiya ma'lum sinflar to'plamini tanlash, ularni qayta ishlash va maxsus arxivga siqish imkonini beradi. Bularning barchasi xotirani tejash uchun amalga oshiriladi. Ko'pincha JVM ning turli nusxalari standart kutubxonaga kiritilgan bir xil sinflarni yuklaydi. Va CDS barcha JVM nusxalariga bitta arxivni unda joylashgan sinflar bilan almashish imkonini beradi. Bu dasturni yuklash vaqtini ham, xotiradan foydalanishni ham qisqartiradi. Aslida, CDS JVMni ishga tushirish unumdorligini yaxshilaydi va 5-versiyadan boshlab bir nechta JVMlar bir xil jismoniy yoki virtual mashinada ishlayotganida resurs izini kamaytiradi. Ammo ilgari CDS-dan foydalanish faqat bootstrap loader bilan cheklangan edi. Endi dastur CDS deb nomlangan kengaytirilgan versiyasi boshqa yuklagichlar uchun sinflar bilan maxsus arxivlarni yuklash imkonini beradi. [312] Thread-Local Handshakes - bu JVM ichidagi juda past darajadagi o'zgarish bo'lib, u global VM xavfsizlik nuqtasini ishga tushirmasdan qayta qo'ng'iroqlarni iplar bo'ylab bajarishga imkon beradi. Bu sizga bir vaqtning o'zida (yoki umuman yo'q) emas, balki alohida iplarni xarajatsiz to'xtatish imkonini beradi. [313] Mahalliy sarlavha yaratish vositasini (javah) olib tashlang . Java 9-da til ishlab chiquvchilari keraksiz vositalarni faol ravishda olib tashlashni boshladilar va JEP 313 bu yaxshi ishni davom ettirmoqda. Agar kodda mahalliy usullar mavjud bo'lsa, javah vositasi JNI sarlavhalarini yaratadi. Sog'lommi? Albatta, lekin JDK 8 dan boshlab mahalliy javac kompilyatorining o'zi JNI sarlavhalarini yaratishi mumkin. Shunday qilib, endi ular javahdan qutulishga qaror qilishdi. Aytgancha, Panama loyihasi hozirda ishlab chiqilmoqda , bu, xususan, JNI o'rnini bosishi mumkin. [314] Unicode til tegining qoʻshimcha kengaytmalari Ushbu oʻzgarish BCP 47 til teglariga qoʻshimcha Unicode kengaytmalarini joriy qilish uchun java.util.Locale sinfini va bogʻlangan APIʼlarni yaxshilashga moʻljallangan. Xususan, valyuta turi (cu), birinchi kun uchun teglar endi hafta (fw), mintaqa (rg) va vaqt mintaqasi (tz) bekor qilinadi. [316] Muqobil xotira qurilmalarida yigʻma ajratish Ushbu yangilik DRAMdan boshqa xotira turlaridan foydalanadiganlarga yordam beradi. Texnologiyalar doimo o'zgarib borayotganligi sababli, DRAMga o'xshash bir xil interfeys va ishlash xususiyatlariga ega bo'lgan doimiy xotiradan foydalanish bugungi kunda ob'ektiv haqiqatdir. Shunday qilib, JEP 316 JVM ga boshqa turdagi xotiralarga to'p joylashtirish imkonini beradi. [317] Eksperimental Java asosidagi JIT kompilyatori . Yaqinda Metropolis loyihasi e'lon qilindi, u Java-da JVM-ning ko'p qismini qayta yozishni taklif qiladi. Agar bilmagan bo'lsangiz, joriy versiya C++ da yozilgan. Xo'sh, agar siz allaqachon xabardor bo'lsangiz, ehtimol dastlab bunday fikr sizga g'alati tuyulishi mumkin. JVM Java tilida yozilgani uchun JVMni ishga tushirish uchun sizga JVM kerak emasmi? Bu bir-biriga qarama-qarshi ko'zgularni eslatuvchi rekursiya. Biroq, haqiqat biroz boshqacha: JVM Java-da yozilganligi sababli, bu siz uni bayt-kodlarga kompilyatsiya qilishingiz kerak degani emas. Siz aslida AOT kompilyatsiyasidan foydalanishingiz mumkin va keyin JIT kodni kompilyatsiya qiladi, chunki u ishlashni yaxshilash uchun ishlaydi.

Java kodini kompilyatsiya qilish uchun javac kabi vosita odatda ishlatiladi. U Java dasturini bayt kodlari bo'lgan sinf fayllari to'plamiga aylantiradi. Keyinchalik, JVM bayt kodingizni ishga tushiradi va uning tarjimoni ularni protsessor ko'rsatmalariga aylantiradi. Tarjimonga qo'shimcha ravishda JVM ham o'rnatilgan kompilyatorga ega va u bayt kodidan protsessor uchun ko'rsatmalar ham yaratishi mumkin. Bu ish vaqti kompilyatsiyasi, ishga tushirish vaqtida kompilyatsiya deb ataladi. Odatda tez-tez ishlatiladigan kod bunday kompilyatsiyaga duchor bo'ladi - bu ish faoliyatini yaxshilaydi.

Kompilyator amallarni turli yo'llar bilan bajarishi mumkin: JIT kompilyatsiyasi (faqat o'z vaqtida) - dinamik, to'g'ridan-to'g'ri dasturni bajarish paytida yoki AOT kompilyatsiyasi (vaqtdan oldin) - bajarishdan oldin.

Jaotc AOT kompilyatori JDK 9 da taqdim etilgan. Hozirda Hotspot JVM ikkita JIT kompilyatorini o'z ichiga oladi, C1 (tezlik uchun) va C2 ​​(optimallashtirish uchun).

JEP 317 JDK uchun kompilyator Graal tadqiqot loyihasini taqdim etadi. Bu Metropolisni haqiqatga aylantirishga yordam beradigan va JVM-ni ishlashda C++ da yozilgan joriy versiyaga mos kelishiga (yoki undan ham yaxshisi, oshib ketishiga) imkon beradigan aniq asosdir. [319] Ildiz sertifikatlari JDKdagi sertifikatlashtirish markazi (CA) sertifikatlarining standart toʻplamidir. TLS kabi muhim xavfsizlik komponentlari endi OpenJDK tuzilmalarida sukut bo'yicha ishlaydi. Ushbu foydali qo'shimcha Oracle OpenJDK ikkilik fayllari va Oracle JDK ikkilik fayllari funktsional jihatdan bir xil bo'lishini ta'minlash uchun qilayotgan ishlarining bir qismidir. [322] Vaqtga asoslangan relizlar versiyasi - Java 10 da Xususiyatlar nashrlariga yangi xususiyatlar qo'shiladi va Yangilanish relizlarida xatolar tuzatiladi. Aslida, bizda JDK versiyasi satr formatlarini o'rnatishning yangi usuli mavjud. U JDK 9 bilan juda g'alati vaziyatni tuzatadi. Birinchi yangilanish JDK 9.0.1 edi, bu juda mantiqiy. Ikkinchi yangilanish - JDK 9.0.4, bu mantiqqa to'g'ri kelmaydi. Mantiq shundan iboratki, JDK 9 versiyasini raqamlash sxemasida favqulodda, rejalashtirilmagan yangilanish holatlarida yangilanishlar o'rtasida bo'sh joy qoladi. Yangilash kerak bo'lmagani uchun, nima uchun uni JDK 9.0.2 deb atash mumkin emas? Va yangi Java versiyasi formati qanday ko'rinishga ega:
[1-9][0-9]*((\.0)*\.[1-9][0-9]*)*

Yangi API'lar

JDK 10 standart sinf kutubxonalariga 73 ta qo'shimchalar mavjud.
  • java.awt.To'plam

    int getMenuShortcutKeyMaskEx (): Qaysi kengaytirilgan modifikator tugmasi yorliq menyusi uchun mos tezlatgich tugmasi ekanligini belgilaydi.

  • java.awt.geom.Path2D:

    void trimToSize (): Ushbu misolning hajmini Path2Djoriy hajmiga qisqartiradi. Ilova ushbu amaldan yo'lni saqlashni minimallashtirish uchun foydalanishi mumkin. Xuddi shu usul ichki sinflarga qo'shilgan Path2D.Doubleva Path2D.Float.

  • java.io.ByteArrayOutputStream:

    String toString (Charset): haddan tashqari yuklangan toString, belgilangan kodlash yordamida baytlarni dekodlash orqali bufer tarkibini satrga aylantiradi.

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

    Bu sinflarning ikkalasida qo'shimcha argument oladigan uchta yangi konstruktor mavjud charset.

  • java.io.Reader:

    long transferTo (Writer): Ushbu o'quvchining barcha belgilarini o'qiydi va belgilarni o'qilgan tartibda berilgan yozuvchiga yozadi.

  • java.lang.Runtime.Version:

    Satr maydonlarining yangi versiyasi (JEP 322) uchun butun son qiymatini qaytaradigan to'rtta yangi usul: feature (), interim (), patch ()va update ().

  • java.lang.StackWalker.StackFrame:

  • getDescriptor() qatori:

    Java Virtual Mashina spetsifikatsiyasi bilan belgilangan ushbu stek ramkasi tomonidan ifodalangan usulga dastani qaytaradi.

  • getMethodType() satri:

    MethodTypestek ramkasi bilan ifodalangan usul uchun parametr turlarini va qaytish turini ifodalovchi qaytaradi .

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

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