• Вышли обновления Java:
• Вышли три новых JEP'а. Это JEP 431: Sequenced Collections, JEP 432: Record Patterns (Second Preview) и JEP 433: Pattern Matching for switch (Fourth Preview). Про record patterns и паттерн-матчинг для switch мы писали в прошлом выпуске, когда они были ещё черновиками, а вот sequenced collections упоминали совсем давно (в выпуске #35), поэтому давайте рассмотрим его снова и более подробно.
В JEP 431 предлагается ввести три новых интерфейса в пакет java.util, которые будет представлять собой коллекции или словари с определённым порядком элементов: SequencedCollection, SequencedSet и SequencedMap.
SequencedCollection будет наследоваться от интерфейса Collection, и его наследниками будут List, Deque и SequencedSet. Примерами такого типа коллекции будут ArrayList, LinkedList, ArrayDeque, LinkedHashSet и TreeSet (то есть коллекции, в которых есть определённый порядок элементов). Пример коллекции, которая не является SequencedCollection – HashSet (в нём порядок элементов не определён).
SequencedSet будет наследоваться от Set и SequencedCollection. Его наследником будет SortedSet. Примеры конкретных множеств такого типа: TreeSet и LinkedHashSet.
SequencedMap будет наследоваться от Map. Его наследником будет SortedMap. Примеры конкретных реализаций: TreeMap и LinkedHashMap. В HashMap нет определённого порядка элементов, поэтому она не будет являться SequencedMap.
В SequencedCollection будут новые методы, которых нет в Collection: getFirst(), getLast(), addFirst(), addLast(), removeFirst(), removeLast(). Также будет новый метод reversed(), который будет возвращать view с обратным порядком элементов.
В SequencedMap будут новые методы firstEntry(), lastEntry(), pollFirstEntry(), pollLastEntry(), firstKey(), lastKey(), putFirst(), putLast(), reversed(), sequencedKeySet(), sequencedValues() и sequencedEntrySet().
• GraalVM CE станет частью OpenJDK. Такое заявление появилось в Твиттере проекта GraalVM. На данный момент других деталей нет кроме тех, о которых заявлено в твите. Из того, что известно сейчас:
- В OpenJDK переедут JIT-компилятор и Native Image, входящие в состав GraalVM Community Edition.
- GraalVM Enterprise Edition остаётся отдельным продуктом с коммерческой лицензией. У GraalVM EE больше оптимизаций, чем у CE, и выше производительность.
- В GraalVM будут использоваться те же процессы разработки и тот же релизный цикл, что и у JDK. Модели лицензирования также будут согласованы.
В ближайшее время ожидается более подробная информация на сайте проекта.
• Новая среда разработки Fleet от JetBrains перешла в стадию Public Preview и теперь доступна для скачивания неограниченному кругу пользователей.
• Появились первые EA-сборки Generational ZGC. Добавление поколений в сборщик мусора ZGC должно уменьшить накладные расходы на сборку мусора и увеличить скорость выделения памяти под объекты при длительном режиме аллокации.
• Андрей Паньгин выпустил библиотеку nalim для быстрых нативных вызовов из Java, которая не использует JNI и не страдает от его накладных расходов. Библиотека может позиционироваться как замена JNI Critical Natives, которые были удалены в JDK 18. Кроме того, JNI Critical Natives были приватным API, а nalim использует стандартный интерфейс JVMCI (который, правда, требует флагов -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI).
Как утверждает Андрей, он написал библиотеку за две ночи.
• Вышел EclipseLink 4. Он полностью поддерживает спецификацию Jakarta Persistence API 3.1.