Новости Java #47

• Вышли обновления 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 (то есть коллекции, в которых есть определённый порядок элементов). Пример коллекции, которая не является SequencedCollectionHashSet (в нём порядок элементов не определён).

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.

Подписывайтесь на канал в Telegram, чтобы не пропускать новости.

Все материалы на этом сайте выложены под лицензией CC BY-SA 4.0
© Евгений Козлов, 2017-2024
Feed
Table of JEPs