«1. Введение
JDK 10, реализация Java SE 10, была выпущена 20 марта 2018 г.
В этой статье мы рассмотрим и рассмотрим новые функции и изменения, представленные в JDK 10. ~ ~~ 2. Вывод типа локальной переменной
Перейдите по ссылке, чтобы прочитать подробную статью об этой функции:
Вывод типа локальной переменной в Java 10
3. Неизменяемые коллекции
Есть несколько связанных изменений в неизменяемые коллекции в Java 10.
3.1. copyOf()
java.util.List, java.util.Map и java.util.Set получили новый статический метод copyOf(Collection).
Возвращает немодифицируемую копию данной коллекции:
Любая попытка изменить такую коллекцию приведет к исключению времени выполнения java.lang.UnsupportedOperationException.
@Test(expected = UnsupportedOperationException.class)
public void whenModifyCopyOfList_thenThrowsException() {
List<Integer> copyList = List.copyOf(someIntList);
copyList.add(4);
}
3.2. toUnmodified*()
java.util.stream.Collectors получает дополнительные методы для сбора потока в неизменяемый список, карту или набор:
Любая попытка изменить такую коллекцию приведет к java.lang.UnsupportedOperationExceptionruntime исключение.
@Test(expected = UnsupportedOperationException.class)
public void whenModifyToUnmodifiableList_thenThrowsException() {
List<Integer> evenList = someIntList.stream()
.filter(i -> i % 2 == 0)
.collect(Collectors.toUnmodifiableList());
evenList.add(4);
}
4. Optional*.orElseThrow()
java.util.Optional, java.util.OptionalDouble, java.util.OptionalIntand java.util.OptionalLongeach получил новый метод orElseThrow(), который не принимает никаких аргументов и выдает NoSuchElementException, если значение отсутствует:
Это синоним и теперь является предпочтительной альтернативой существующему методу get().
@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 container и будет извлекать специфичную для контейнера конфигурацию вместо того, чтобы запрашивать саму операционную систему — она применяется к таким данным, как количество ЦП и общий объем памяти, выделенной для контейнера.
Однако эта поддержка доступна только для платформ на базе Linux. Эта новая поддержка включена по умолчанию и может быть отключена в командной строке с помощью параметра JVM:
Кроме того, это изменение добавляет параметр JVM, который позволяет указать количество ЦП, которые будет использовать JVM:
-XX:-UseContainerSupport
Кроме того, были добавлены три новых параметра JVM, которые позволяют пользователям контейнеров Docker получить более детальный контроль над объемом системной памяти, который будет использоваться для кучи Java:
-XX:ActiveProcessorCount=count
7. Корневые сертификаты
-XX:InitialRAMPercentage
-XX:MaxRAMPercentage
-XX:MinRAMPercentage
Хранилище ключей cacerts, которое изначально было пустым, предназначено для хранения набора корневых сертификатов, которые можно использовать для установления доверия в цепочках сертификатов, используемых различными протоколами безопасности.
В результате важные компоненты безопасности, такие как TLS, не работали по умолчанию в сборках OpenJDK.
В Java 10 Oracle открыл исходный код корневых сертификатов в программе Oracle Java SE Root CA, чтобы сделать сборки OpenJDK более привлекательными для разработчиков и уменьшить различия между этими сборками и сборками Oracle JDK.
8. Прекращение поддержки и удаление
8.1. Параметры и инструменты командной строки
Инструмент javah был удален из Java 10, который генерировал заголовки C и исходные файлы, необходимые для реализации собственных методов — теперь вместо него можно использовать javac -h.
policytool был основанным на пользовательском интерфейсе инструментом для создания и управления файлами политик. Сейчас это удалено. Пользователь может использовать простой текстовый редактор для выполнения этой операции.
Удален java -Xprofoption. Опция использовалась для профилирования работающей программы и отправки данных профилирования на стандартный вывод. Вместо этого пользователь должен использовать инструмент jmap.
8.2. API
Устаревший пакет java.security.acl помечен forRemoval=true и подлежит удалению в будущей версии Java SE. Он был заменен java.security.Policy и связанными с ним классами.
Точно так же API java.security.{Certificate,Identity,IdentityScope,Signer} помечаются forRemoval=true.
9. Версии версий с привязкой ко времени
Начиная с Java 10, Oracle перешла на выпуск Java с привязкой ко времени. Это имеет следующие последствия:
«java -version теперь будет содержать дату GA, что упрощает определение возраста выпуска:
- A new Java release every six months. The March 2018 release is JDK 10, the September 2018 release is JDK 11, and so forth. These are called feature releases and are expected to contain at least one or two significant features
- Support for the feature release will last only for six months, i.e., until next feature release
- Long-term support release will be marked as LTS. Support for such release will be for three years
- Java 11 will be an LTS release
10. Заключение
$ 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)
В этой статье мы рассмотрели новые функции и изменения, внесенные в Java 10.
Как обычно, фрагменты кода можно найти на GitHub.
«