Руководство по Java 10

Руководство по Java 10

1. Вступление

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

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

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

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

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

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

3.1. copyOf()с

java.util.List,java.util.Map andjava.util.Set each получил новый статический методcopyOf(Collection).

Возвращает неизменяемую копию заданногоCollection:

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

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

3.2. toUnmodifiable*()с

java.util.stream.Collectors  получить дополнительные методы для сбора неизменяемогоStream intoList,Map orSet:

@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.UnsupportedOperationExceptionruntime.

4. Optional.orElseThrow () *

java.util.Optional,java.util.OptionalDouble,java.util.OptionalIntandjava.util.OptionalLongeach получил новый методorElseThrow()w, который не принимает никаких аргументов и выдаетNoSuchElementException, если значение отсутствует:

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

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

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

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

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

JVMs are now aware of being run in a Docker container and будет извлекать конфигурацию, специфичную для контейнера, вместо того, чтобы запрашивать саму операционную систему - он применяется к таким данным, как количество процессоров и общий объем памяти, которые были выделены для контейнера.

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

-XX:-UseContainerSupport

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

-XX:ActiveProcessorCount=count

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

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

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

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

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

With Java 10, Oracle has open-sourced the root certificates ошибается в программе Oracle Java SE Root CA, чтобы сделать сборки OpenJDK более привлекательными для разработчиков и уменьшить различия между этими сборками и сборками Oracle JDK.

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

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

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

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

Удаленjava -Xprofoption. Опция использовалась для профилирования работающей программы и отправки данных профилирования на стандартный вывод. Вместо этого пользователь должен использовать табуретjmap .

8.2. APIs

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

Точно так же API java.security. \ {Certificate, Identity, IdentityScope, Signer} помечены какforRemoval=true.

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

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

  1. A new Java release every six months. Выпуск за март 2018 г. - это JDK 10, выпуск за сентябрь 2018 г. - это JDK 11 и т. д. Они называются выпусками функций и, как ожидается, будут содержать как минимум одну или две важные функции.

  2. Support for the feature release will last only for six months, то есть до следующего выпуска функции

  3. Выпуск долгосрочной поддержки будет отмечен как LTS. Поддержка такого релиза будет три года.

  4. Java 11 будет релизом LTS

java -version will now contain the GA date, что упрощает определение возраста выпуска:

$ 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.

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