Рубрики
Без рубрики

Новые функции в Java 10

Краткий и практический обзор новой функциональности в Java 10.

Автор оригинала: Ganesh Pagade.

1. введение

JDK 10 , который является реализацией Java SE 10, был выпущен 20 марта 2018 года.

В этой статье мы рассмотрим и изучим новые функции и изменения, внесенные в JDK 10.

2. Вывод типа Локальной Переменной

Перейдите по ссылке для получения подробной статьи об этой функции:

Вывод типа локальной Переменной Java 10

3. Неизменяемые Коллекции

В Java 10 есть несколько изменений, связанных с неизменяемыми коллекциями.

3.1. Копия()

java.util.Список , java.util.Map и java.util.Набор каждый получил новый статический метод copyOf(Коллекция) .

Он возвращает неизменяемую копию данной коллекции :

@Test(expected = UnsupportedOperationException.class)
public void whenModifyCopyOfList_thenThrowsException() {
    List copyList = List.copyOf(someIntList);
    copyList.add(4);
}

Любая попытка изменить такую коллекцию приведет к java.lang.UnsupportedOperationException исключение времени выполнения.

3.2. к неизменяемым*()

java.util.stream.Коллекторы получают дополнительные методы для сбора Потока в неизменяемый Список , Карту или Набор :

@Test(expected = UnsupportedOperationException.class)
public void whenModifyToUnmodifiableList_thenThrowsException() {
    List evenList = someIntList.stream()
      .filter(i -> i % 2 == 0)
      .collect(Collectors.toUnmodifiableList());
    evenList.add(4);
}

Любая попытка изменить такую коллекцию приведет к java.lang.UnsupportedOperationException исключение времени выполнения.

4. Необязательно*.orElseThrow()

java.util.Необязательно , java.util.OptionalDouble , java.util.OptionalInt и java.util.OptionalLong каждый получил новый метод orElseThrow() , который не принимает никаких аргументов и выдает NoSuchElementException , если нет значения:

@Test
public void whenListContainsInteger_OrElseThrowReturnsInteger() {
    Integer firstEven = someIntList.stream()
      .filter(i -> i % 2 == 0)
      .findFirst()
      .orElseThrow();
    is(firstEven).equals(Integer.valueOf(2));
}

Это синоним и в настоящее время является предпочтительной альтернативой существующему получить() метод.

5. Повышение производительности

Перейдите по ссылке для получения подробной статьи об этой функции:

Улучшения производительности Java 10

6. Осведомленность о контейнерах

JVM теперь знают о запуске в контейнере Docker и будут извлекать конфигурацию, специфичную для контейнера, вместо того, чтобы запрашивать саму операционную систему-это относится к таким данным, как количество процессоров и общая память, выделенная контейнеру.

Однако эта поддержка доступна только для платформ на базе Linux. Эта новая поддержка включена по умолчанию и может быть отключена в командной строке с помощью опции JVM:

-XX:-UseContainerSupport

Кроме того, это изменение добавляет опцию JVM, которая предоставляет возможность указать количество процессоров, которые будет использовать JVM:

-XX:ActiveProcessorCount=count

Кроме того, были добавлены три новых параметра JVM, чтобы пользователи контейнеров Docker могли более точно контролировать объем системной памяти, которая будет использоваться для кучи Java:

-XX:InitialRAMPercentage
-XX:MaxRAMPercentage
-XX:MinRAMPercentage

7. Корневые сертификаты

Хранилище ключей cacerts, которое до сих пор было пустым, предназначено для хранения набора корневых сертификатов, которые можно использовать для установления доверия к цепочкам сертификатов, используемым различными протоколами безопасности.

В результате критические компоненты безопасности, такие как TLS, не работали по умолчанию в сборках OpenJDK.

С Java 10 Oracle имеет открытые корневые сертификаты в программе Oracle Java SE Root CA, чтобы сделать сборки OpenJDK более привлекательными для разработчиков и уменьшить различия между этими сборками и сборками Oracle JDK.

8. Устаревание и удаление

8.1. Параметры и инструменты командной строки

Инструмент javah был удален из Java 10, который генерировал заголовки C и исходные файлы, необходимые для реализации собственных методов – теперь вместо этого можно использовать javac -h .

инструмент политики был инструментом на основе пользовательского интерфейса для создания файлов политики и управления ими. Теперь это было удалено. Для выполнения этой операции пользователь может использовать простой текстовый редактор.

Удалена опция java -Xprof . Эта опция использовалась для профилирования запущенной программы и отправки данных профилирования в стандартный вывод. Теперь пользователь должен использовать вместо этого инструмент map .

8.2. API

Устаревший пакет java.security.acl был помечен и подлежит удалению в будущей версии Java SE. Он был заменен на java.security.Политика и связанные классы.

Аналогично, java.security.{Сертификат,Удостоверение,Область действия Удостоверения,Подписывающее лицо} API помечены для удаления=true .

9. Управление версиями Выпуска на основе Времени

Начиная с Java 10, Oracle перешла на выпуск Java, основанный на времени. Это имеет следующие последствия:

  1. Новый выпуск Java каждые шесть месяцев. Выпуск в марте 2018 года-JDK 10, выпуск в сентябре 2018 года-JDK 11 и так далее. Они называются выпусками функций и, как ожидается, будут содержать по крайней мере одну или две важные функции
  2. Поддержка выпуска функции будет продолжаться только в течение шести месяцев , т. е. до следующего выпуска функции
  3. Выпуск долгосрочной поддержки будет помечен как LTS. Поддержка такого выпуска будет осуществляться в течение трех лет
  4. Java 11 будет выпуском LTS

java -версия теперь будет содержать дату GA , что облегчит определение возраста выпуска:

$ java -version
openjdk version "10" 2018-03-20
OpenJDK Runtime Environment 18.3 (build 10+46)
OpenJDK 64-Bit Server VM 18.3 (build 10+46, mixed mode)

10. Заключение

В этой статье мы рассмотрели новые функции и изменения, внесенные Java 10.

Как обычно, фрагменты кода можно найти на GitHub .