Хотя до выхода Java 13 осталось ещё целых три месяца, на страничке OpenJDK постоянно появляются подробности о нововведениях в грядущей версии нашего с вами любимого языка. Напомним, изменения в Java вносятся с помощью предложений по улучшению JDK — JEP (JDK Enhancement Proposals), которые позднее интегрируются в новые версии (ну, или не интегрируются, если их не сочтут достаточно полезными и целесообразными). Ниже — некоторые фичи, которые были предложены для новой версии Java: Текстовые блоки. Согласно JEP-355, в JDK 13 должны появиться текстовые блоки (на уровне превью). Текстовые блоки — это многостраничные строковые литералы, которые устраняют необходимость в подавляющем большинстве escape-последовательностей. Теперь не нужно будет экранировать большинство специальных символов, а ещё — появятся автоматические переносы строки. Текстовый блок автоматически форматирует строку и предоставляет разработчикам контроль над форматом. Этот JEP был создан в первую очередь для упрощения процессов написания и чтения кода, поскольку в Java для встраивания не-Java объектов (например, XML или JSON) обычно требуются “танцы с бубном” — специфическое редактирование строк, поэтому такие вставки обычно сложно создавать, поддерживать и читать. Обновление API сокетов. В новой Java, скорее всего, перепишут устаревшие API сокетов. По идее обновлённая реализация станет более современной и более лёгкой в обслуживании и отладке. Она должна заменить базовую реализацию, используемую API-интерфейсами net.Socket и java.net.ServerSocket. Новая версия предназначена для простой адаптации к работе с user-mode тредами (волокнами или fibers), которые исследуются в Loom, проекте, созданном для того, чтобы облегчить написание, отладку, профилирование и поддержку параллельных приложений. Корни вышеупомянутых устаревших API восходят ещё к JDK 1.0 и содержат смесь устаревшего кода C и Java, сложного для отладки и сопровождения. У прежней реализации также есть другие проблемы: собственная структура данных для поддержки асинхронного закрытия, вызывающая проблемы с надежностью и переносом, а также проблемы параллелизма, требующие пересмотра. Усовершенствование ZGC (Z Garbage Collector). В новой версии сборщик мусора ZGC хотят заставить возвращать неиспользуемую память в операционную систему. ZGC позиционируется как масштабируемый сборщик мусора с низкой задержкой, однако на сегодняшний день он всё ещё не возвращает неиспользуемую память обратно в ОС, даже если эта память долго не использовалась. Очевидно, это нерационально, а для некоторых приложений и сред, тех, что не могут простаивать длительное время, такой подход и вовсе критичен. Улучшение функциональности Class-Data Sharing AppCDS для обеспечения динамического архивирования классов в конце выполнения приложения. Class-Data Sharing или общий доступ к данным классов был впервые представлен в JDK 5. Эта функциональность позволяет предварительно обрабатывать набор классов в общем архивном файле, который затем можно отобразить в памяти во время выполнения, чтобы сократить время запуска. Теперь архивные классы будут включать все загруженные классы приложений и библиотек, отсутствующие в стандартном архиве CDS базового уровня. Это предложение предназначено для повышения удобства использования AppCDS и устранения необходимости для пользователей выполнять пробные запуски для создания списка классов для каждого приложения. Продакт-версия новой формы выражений с оператором Switch — Switch Expressions. В Java 12 версии в стадии превью появилось упрощение кода оператора switch. Его можно будет использовать либо по старинке, либо в качестве выражения. Теперь остаётся дождаться 17 сентября — даты релиза Java 13. Ну а если вам не терпится ознакомиться с нововведениями уже сейчас, вы можете загрузить бета-сборки с официального сайта.