Автор оригинала: 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() { ListcopyList = List.copyOf(someIntList); copyList.add(4); }
Любая попытка изменить такую коллекцию приведет к java.lang.UnsupportedOperationException исключение времени выполнения.
3.2. к неизменяемым*()
java.util.stream.Коллекторы получают дополнительные методы для сбора Потока в неизменяемый Список , Карту или Набор :
@Test(expected = UnsupportedOperationException.class) public void whenModifyToUnmodifiableList_thenThrowsException() { ListevenList = 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, основанный на времени. Это имеет следующие последствия:
- Новый выпуск Java каждые шесть месяцев. Выпуск в марте 2018 года-JDK 10, выпуск в сентябре 2018 года-JDK 11 и так далее. Они называются выпусками функций и, как ожидается, будут содержать по крайней мере одну или две важные функции
- Поддержка выпуска функции будет продолжаться только в течение шести месяцев , т. е. до следующего выпуска функции
- Выпуск долгосрочной поддержки будет помечен как LTS. Поддержка такого выпуска будет осуществляться в течение трех лет
- 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 .