• Вышли обновления 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.