JDK 14: Новите функции в Java 14

Комплектът за разработка на Java (JDK) 14 достигна GA, пристигайки в версия за общодостъпност за производствени внедрения. Надстройката до стандартна Java включва нови възможности като JDK Flight Recorder поточно предаване на събития, съвпадение на шаблони и изрази за превключване. 

JDK 14 е функционално издание на Java, а не дългосрочна поддръжка (LTS), след шестмесечния каданс за Java. JDK 14 ще получи актуализации на защитата през април и юли, преди да бъде заменен от JDK 15, също не-LTS версия, която трябва да се появи през септември. Текущата версия на LTS е JDK 11. 

Новите функции и подобрения в JDK 14 включват:

  • JFR Event Streaming предоставя API за непрекъснато потребление на JFR данни както от приложения, така и извън процеса. JFR е инструмент за събиране на профилиране и диагностични данни за Java приложение и JVM, докато те работят. Предложението за поточно предаване на събития записва същия набор от събития като случая без поточно предаване, като режийните разходи са по-малко от един процент, ако е възможно. Поточното предаване на събития трябва да съществува едновременно със записи без поточно предаване, както дискови, така и базирани на памет. Мотивирането на това предложение е ситуация, при която HotSpot VM излъчва повече от 500 точки с данни, използвайки JFR, повечето от които са достъпни само чрез анализиране на регистрационни файлове. В момента потребителят трябва да започне запис, да го спре, да изхвърли съдържанието на диск и след това да анализира файла за запис. Това работи добре за профилиране на приложения, но не и за целите на мониторинга.Пример за наблюдение на използването е табло, което показва динамични актуализации на данните. Съществуват допълнителни разходи за създаване на запис, като например копиране на данни от хранилището на диска в отделен файл за запис. Ако имаше начин за четене на данни, които се записват от хранилището на диска, без да се създава нов записващ файл, голяма част от режийните разходи биха могли да бъдат избегнати.
  • Планираното подобрение се  NullPointerExceptionsотнася до подобряване на използваемостта на изключенията, генерирани от JVM, като описва точно коя променлива е нула. Авторите на предложението се стремят да предоставят полезна информация на разработчиците и помощния персонал относно преждевременното прекратяване на програма и да подобрят разбирането на програмата чрез по-ясно свързване на динамично изключение със статичен програмен код. Едната цел е да се намали объркването и загрижеността на разработчиците NullPointerExceptions.
  • Енергичните картографирани байтови буфери ще добавят нови специфични за JDK режими на картографиране на файлове, които позволяват API на FileChannel да се използва за създаване на MappedByteBufferекземпляри, които се отнасят до енергонезависима памет (NVM). NVM дава възможност на програмистите да изграждат и актуализират състоянието на програмата в различни изпълнения на програмата, без да поема значителни разходи за копиране или превод, които обикновено се изискват от операциите за въвеждане и извеждане. Това е особено важно за транзакционните програми. По този начин основната цел на това предложение за подобрение на JDK е да гарантира, че клиентите могат да имат достъп и да актуализират NVM от Java програма последователно и ефективно. Вторичната цел е да се приложи това поведение на фиксиране, като се използва ограничен, JDK вътрешен API, дефиниран в клас Unsafe, така че да може да се използва повторно от класове, различни отMappedByteBufferкоито може да се наложи да се ангажират с NVM. Друга цел е да се позволи на буферите, картографирани върху NVM, да бъдат проследявани от съществуващите API за наблюдение и управление. Целевите платформи за OS / CPU включват Linux / x64 и Linux / AArch64.
  • Превключващите изрази опростяват кодирането чрез разширяване,  switchтака че да може да се използва като израз или израз. Превключващите изрази се очаква да бъдат постоянна функция в JDK 14, след като бъдат визуализирани както в JDK 12, така и в JDK 13. Изразите на превключвателите също се подготвят за използването на съвпадение на шаблони в switch. Съпоставянето на шаблони позволява на разработчиците условно да извличат компоненти от обектите по-кратко и безопасно. 
  • Разпределение на памет, съобразено с NUMA, за събирача на боклук G1, предназначено да подобри производителността на G1 на големи машини. 
  • Премахване на събирача за боклук Concurrent Mark Sweep (CMS), който преди това беше остарял и планиран за премахване. Възникнаха наследници на CMS, включително ZGC и Shenandoah. 
  • Пренасяне на ZGC към MacOS. Досега се поддържаше само на Linux.
  • Премахване на инструментите pack200 и unpack200 и API Pack200 в java.util.jarпакета. Всички те бяха оттеглени в Java SE 11 с намерението да ги премахнат в бъдеще. Pack200 е схема за компресиране на JAR файлове.
  • Записи, които биха осигурили компактен синтаксис за деклариране на класове, които са прозрачни притежатели на плитко неизменяеми данни. Записите улесняват създаването на класове, които по същество са носители на данни, без да се налага да пишете много образци. В предложението се посочва, че трябва да е лесно и кратко да се декларират плитко неизменяеми, добре възпитани номинални агрегати от данни.
  • Инструмент за опаковане, във фаза на инкубатор за разработване, за опаковане на самостоятелни Java приложения. Инструментът ще се основава на JavaFX javapackager. Такъв инструмент беше включен в Java, но беше изрязан от JDK 11 като част от премахването на JavaFX.
  • Подобрете езика със съвпадение на шаблона за instanceof оператора. Това би било функция за предварителен преглед в JDK 14. Съпоставянето на шаблони позволява общата логика в дадена програма, главно условното извличане на компоненти от обекти, да бъде изразена по-кратко и безопасно. Кодът може да бъде кратък и безопасен за типа.
  • Втори предварителен преглед на текстови блокове, многоредов литералов низ, който избягва необходимостта от повечето изходни последователности и автоматично форматира низа по предсказуем начин. Текстовите блокове ще дадат на разработчика контрол над формата, когато е желано, ще опростят писането на Java програми и ще подобрят четливостта на низовете. Текстовите блокове бяха визуализирани в JDK 13; итерацията JDK 14 ще добави изходни последователности за управление на явни бели пространства и контрол на нов ред.
  • Оттегляне на комбинацията от алгоритмите за събиране на боклук Parallel Scavenge и Serial Old. Поддръжниците на Java смятат, че тази комбинация се използва много малко, но изисква много поддръжка.
  • Пренасяне на ZGC (Z Garbage Collector) към Windows. Тази функция отново е преместена в официално насочения списък, след като е върната обратно към списъка с предложени за насочване.
  • API за достъп до чужда памет, с въвеждането на API за Java програми за безопасен и ефективен достъп до чужда памет извън Java купчината. Този API трябва да служи като алтернатива на основните начини, по които Java програмите имат достъп до паметта, включително nio.ByteBufferи sun.misc.Unsafe. Новият API трябва да може да работи с различни видове памет, включително естествена, постоянна памет и управлявана купчина. Не би трябвало API да подкопава безопасността на JVM. Освобождаването на паметта трябва да бъде изрично в изходния код. API се очаква да подпомогне развитието на местната подкрепа за оперативна съвместимост, което е целта на проект Панама.
  • Оттегляне на портовете Solaris / Sparc, Solaris / x64 и Linux / Sparc, с намерението да бъдат премахнати в бъдеща версия. Поддръжката за отпадане на тези портове ще даде възможност на участниците в OpenJDK да ускорят разработването на нови функции. Въпреки че Solaris и Sparc бяха основни технологии в Sun Microsystems, първоначалният създател на Java, те бяха заменени в технологичното пространство през последните години от Linux OS и Intel процесори.

Къде да изтеглите JDK 14

Можете да изтеглите JDK с отворен код от jdk.java.net за Linux, Windows и macOS. Можете да изтеглите Oracle търговски Java SE 14 изтегляния от Oracle.com.