+38/050/370-3627
+38/093/220-0872
+38/044/257-2444
Новини

Oracle випустив платформу Java SE 15 (Java Platform, Standard Edition 15)

Oracle випустила Java SE 15 (платформа Java, стандартна версія 15)

Oracle випустила  Java SE 15 (Java Platform, Standard Edition 15), яка використовує проект з відкритим вихідним кодом OpenJDK в якості еталонної реалізації. Java SE 15 зберігає зворотну сумісність з минулими випусками платформи Java, і всі раніше написані Java-проекти будуть працювати без змін при запуску під новою версією. Готові до установки збірки Java SE 15 (JDK, JRE і Server JRE) підготовлені для Linux (x86_64), Windows і macOS. Еталонна реалізація OpenJDK Java 15 повністю відкрита під ліцензією GPLv2, за винятком GNU ClassPath, що дозволяє динамічно посилатися на комерційні продукти.

Java SE 15 класифікується як застарілий випуск, з оновленнями, які будуть випущені до наступного випуску. Java SE 11 слід використовувати як гілку довгострокової підтримки (LTS), для якої оновлення будуть випущені до 2026 року. Минула гілка LTS Java 8 буде підтримуватися до грудня 2020 року. Наступний реліз LTS запланований на вересень 2021 року. Нагадаємо, що з моменту виходу Java 10 проект перейшов на новий процес розробки, який має на увазі більш короткий цикл генерації нових релізів. Новий функціонал зараз розробляється в одній постійно оновлюваній головній гілці, яка включає в себе готові зміни і від якої відгалужуються кожні півроку для стабілізації нових випусків.

З нововведень  Java 15 можна відзначити:

  •  Вбудована підтримка алгоритму цифрового підпису EdDSA (алгоритм цифрового підпису едвардс-кривої RFC 8032). Пропонована реалізація EdDSA не залежить від апаратних платформ, захищена від атак бічними каналами (забезпечується постійний час всіх розрахунків) і випереджає існуючу реалізацію ecDSA, написану на C за продуктивністю, з однаковим рівнем захисту. Наприклад, EdDSA при використанні еліптичної кривої з 126-бітним ключем демонструє продуктивність, подібну до ECDSA, з еліптичної кривою secp256r1 і 128-бітним ключем.
  •  Додано експериментальну підтримку "запечатаних" класів та інтерфейсів, які не можуть бути використані іншими класами та інтерфейсами для успадкування, розширення або заміщення реалізації. Запечатані класи також забезпечують більш декларативний спосіб обмеження використання суперкласу, ніж модифікатори доступу, засновані на явному перерахуванні підкласів, дозволених для розширення.
       пакет com.example.geometry;
    
       загальнодоступний запечатаний клас Форма
            дозволяє com.example.polar.Circle,com.example.quad.Прямокутник,com.example.quad.simple.Square
                    
                    {...}
    
  • Додана підтримка прихованих класів, які не можуть бути використані безпосередньо байт-кодом інших класів. Ключовою метою прихованих класів є використання в фреймворках, які динамічно генерують класи під час виконання та використовують їх опосередковано через рефлексію. Такі класи зазвичай мають обмежений життєвий цикл, тому підтримка їх для доступу зі статично сформованих класів не виправдана і призведе лише до збільшення споживання пам'яті. Приховані класи також дозволяють обійтися без нестандартного sun.misc.Unsafe::d efineAnonymousClass API, видалення якого планується в майбутньому.
  • Стабілізований і визнаний готовим до широкого використання сміттєзбірник ZGC (Z Garbage Collector). ZGC працює в пасивному режимі, максимально мінімізуючи затримку за рахунок вивезення сміття (час зупинки при використанні ZGC не перевищує 10 мс.) і може працювати як з невеликими, так і з величезними купами, розміром від декількох сотень мегабайт до безлічі терабайт.
  • Стабілізований і визнаний готовим до широкого використання сміттєзбірник Shenandoah, що працює з мінімальними підвісками (збирач сміття з низькою паузою). Shenandoah був розроблений компанією Red Hat і примітний використанням алгоритму, який скорочує час зупинок при зборі сміття за рахунок проведення очищення паралельно з виконанням Java-додатків. Розмір затримок, введених сміттєзбірником, передбачуваний і не залежить від розміру купи, тобто для куп 200 Мб і 200 Гб затримки будуть ідентичними (не виходять за межі 50 мс і зазвичай укладаються в 10 мс);
  • У мові була стабілізована і введена підтримка текстових блоків - нової форми рядкових літералів, що дозволяють включати в вихідний код багаторядкові текстові дані без використання в них втечі символів і збереження вихідного форматування тексту в блоці. Блок обрамлений трьома подвійними лапками. Наприклад, замість коду
       Рядок html = "<HTML>" +
       "\n\t" + "<BODY>" +
       "\n\t\t" + "<H1>\"Java 15 тут!\"</H1>" +
       "\n\t" + "</BODY>" +
       "\n" + "</HTML>";
    
    можна вказати:
       Рядок html = ""
       <HTML>
         <BODY>
           <H1>"Java 15\
     is here!" </H1>
         </BODY>
       </HTML>"";
    
  • Застарілий API DatagramSocket був перероблений . Старі реалізації java.net.DatagramSocket і java.net.MulticastSocket були замінені сучасною реалізацією, яка легше налагоджується і підтримується, і сумісна з віртуальними потоками, розробленими в рамках проекту Loom . У разі можливого порушення сумісності з існуючим кодом стара реалізація не видаляється і може бути активована за допомогою опції jdk.net.usePlainDatagramSocketImpl.
  • Пропонується друга експериментальна реалізація відображення з вибіркою в операторі "instanceof", що дозволяє відразу визначити локальну змінну для доступу до верифікованого значення. Наприклад, можна відразу написати "якщо (obj instanceof String s && s.length() > 5) {.. с.містить(..) ..}" без явного визначення "String s = (String) obj".
    Був:
       if (obj instanceof Group) {
         Group = (Group) obj;
         var записи = group.getEntries();
       }
    
    Тепер можна обійтися без визначення "Group group = (Group) obj":
       if (obj instanceof Group group) {
         var entries = group.getEntries();
       }
    
  •  Пропонується друга експериментальна реалізація ключового слова «record», яке надає компактну форму для визначення класів, що дозволяє обійтися без явного визначення різних низькорівневих методів, таких як equals(), hashCode() і toString(), у випадках, коли дані зберігаються тільки в полях, поведінка яких не змінюється. Коли клас використовує типові реалізації методів equals(), hashCode() і toString(), ви можете обійтися без явного їх визначення:
       публічний запис BankTransaction(Дата локальної дати_дати;
                                  подвійна сума;
                                  Опис рядка) {}
    
    Ця декларація автоматично додасть реалізації методів equals(), hashCode() та toString() на додаток до методів конструктора та getter.
  • Пропонується друга попередня версія API доступу до іноземної пам'яті , що дозволяє Java-додаткам безпечно та ефективно отримувати доступ до областей пам'яті за межами купи Java, маніпулюючи новими абстракціями memorySegment, MemoryAddress та MemoryLayout.
  • Відключена і застаріла методика оптимізації Зміщене блокування, що використовується в HotSpot JVM для зменшення накладних витрат через блокування. Ця методика втратила свою актуальність на системах з атомними інструкціями, що надаються сучасними процесорами, і занадто трудомістка для обслуговування через свою складність.
  • Механізм активації RMI був застарілим і буде видалений у майбутньому випуску. Відзначається, що RMI Activation застаріла, переведена в категорію опцій в Java 8 і майже не використовується в сучасній практиці.
  • Движок Nashorn JavaScript , який був застарілим в Java SE 11, був видалений .
  •  Видалено порти для процесорів Solaris os та SPARC (Solaris/SPARC, Solaris/x64 та Linux/SPARC). Видалення цих портів дозволить спільноті прискорити розробку нових функцій OpenJDK, не витрачаючи час на підтримку функцій, характерних для Solaris і SPARC.

Інші новини

Найкраща ціна